Re: [HACKERS] SCRAM protocol documentation

Поиск
Список
Период
Сортировка
От Álvaro Hernández Tortosa
Тема Re: [HACKERS] SCRAM protocol documentation
Дата
Msg-id 7f196433-7305-df7f-c795-2aab40067cd3@8kdata.com
обсуждение исходный текст
Ответ на Re: [HACKERS] SCRAM protocol documentation  (Michael Paquier <michael.paquier@gmail.com>)
Ответы Re: [HACKERS] SCRAM protocol documentation  (Michael Paquier <michael.paquier@gmail.com>)
Список pgsql-hackers

On 11/08/17 13:18, Michael Paquier wrote:
> On Fri, Aug 11, 2017 at 3:50 PM, Álvaro Hernández Tortosa
> <aht@8kdata.com> wrote:
>> On 11/08/17 03:57, Peter Eisentraut wrote:
>>> The SCRAM protocol documentation
>>> (https://www.postgresql.org/docs/devel/static/sasl-authentication.html)
>>> states
>>>
>>> "To avoid confusion, the client should use pg_same_as_startup_message as
>>> the username in the client-first-message."
>>>
>>> However, the client implementation in libpq doesn't actually do that, it
>>> sends an empty string for the user name.  I find no other reference to
>>> "pg_same_as_startup_message" in the sources.  Should the documentation
>>> be updated?
> Yes, definitely. I think that we should mention that the server uses
> the username of the startup packet and ignores the data sent by the
> frontend potentially provided in client-first-message.
    But it already says so the documentation:

"The username that was already sent in the startup message is used instead."

>
>>> Relatedly, the SCRAM specification doesn't appear to allow omitting the
>>> user name in this manner.  Why don't we just send the actual user name,
>>> even though it's redundant with the startup message?
> The problem is where a username includes characters as a comma or '=',
> which can be avoided if the string is in UTF-8 as the username is
> prepared with SASLprep before being used in the SASL exchange, but we
> have no way now to be sure now that the string is actually in UTF-8.
> If at some point we decide that only things using UTF-8 are good to be
> used during authentication, using the username in the exchange
> messages instead of the one in the startup packet would be fine and
> actually better IMO in the long term. Please note that the
> specification says that both the username and the password must be
> encoded in UTF-8, so we are not completely compliant here. If there is
> something to address, that would be this part.
    The reason why the username is ignored, unless I'm wrong, is not 
exactly that it is already sent. It is that Postgres does not restrict 
usernames to be UTF-8 only, while SCRAM does. As such, if a username 
would not be UTF-8, it will not be sent reliably over SCRAM.

>
>>      If there's a clear meaning about ignoring the user here, why not settle
>> on something like the "*"? It's not going to change the world sending a few
>> bytes less on initialization, but I guess it doesn't hurt either...
> I am not sure either that '*' would be that much helpful. Requiring
> that things are in UTF-8 would be more compliant with the original
> RFC.
    But we really don't need to send the username, since Postgres 
already knows it (and that accommodates for non UTF-8 usernames). So why 
bother? Just sending something like "*" (which is UTF-8 and produces the 
same value under Saslprep) should be enough. I think the idea of 
ignoring the username is pretty neat, but maybe a "standard" like "send 
me an asterisk here" could be even better than leaving it empty.

    Álvaro

-- 

Álvaro Hernández Tortosa


-----------
<8K>data




В списке pgsql-hackers по дате отправления:

Предыдущее
От: Greg Stark
Дата:
Сообщение: Re: [HACKERS] Funny WAL corruption issue
Следующее
От: "Augustine, Jobin"
Дата:
Сообщение: Re: [HACKERS] [BUGS] Replication to Postgres 10 on Windows is broken