HttpListener AuthenticationSchemes.Basic utf-8
От: vaa https://www.youtube.com/playlist?list=PLtrvASfI1KW7VOYRKjglcagQzWLoxlncl
Дата: 17.06.22 08:25
Оценка:
Как заставить это чудо прочитать имя и пароль пользователя в utf-8?
декодируется неверно. видимо считает что только ascii возможны.
      
                if (ctx.User.Identity is HttpListenerBasicIdentity basicIdentity)
                {
                    var login = ctx.Request.Headers["Authorization"].Split(' ');
                    if (!login[0].Equals("Basic", StringComparison.OrdinalIgnoreCase))
                        throw new Exception("ожидается Basic Authorization");

                    string[] userNameAndPassword = UTF8Encoding.UTF8.GetString(Convert.FromBase64String(login[1])).Split(new char[] { ':' }, 2); //<= по-русски
            _ = ctx.User.Identity.Username <= по-китайcки !?

        }


тут https://referencesource.microsoft.com/#System/net/System/Net/WebHeaderCollection.cs,d814c1f1ccad7126
если я правильно понял кодировка не учитывается

Приехали!
Нашел баг-репорт https://social.msdn.microsoft.com/Forums/Windowsapps/en-US/d119226e-2ce8-4b8c-9101-17e75b8443de/uwp-how-to-switch-basic-auth-password-encoding-to-utf8?forum=wpdevelop
поскольку сотрудники МС не знают, видимо никак.
применив https://2cyr.com/decode/?lang=ru выяснил что кодировка Windows-1251 применилась к utf-8.
по исходникам видно, что используется какой-то хитрый алгоритм для определения наличия utf-8 кодировки у хедеров.
что странно. ведь по спеке utf-8 можно явно задать в требовании к авторизации(правда клиент не обязан выполнять это требование).
но в реализации listener нет способа это задать, только костылить свою реализацию.
Отредактировано 21.06.2022 1:21 vaa . Предыдущая версия . Еще …
Отредактировано 17.06.2022 13:43 vaa . Предыдущая версия .
Отредактировано 17.06.2022 9:42 vaa . Предыдущая версия .
Re: HttpListener AuthenticationSchemes.Basic utf-8
От: Igorxz  
Дата: 17.06.22 09:08
Оценка:
Здравствуйте, vaa, Вы писали:

vaa>Как заставить это чудо прочитать имя и пароль пользователя в utf-8?

vaa>декодируется неверно. видимо считает что только ascii возможны.

ставим пакет System.Text.Encoding.CodePages, потом, где-то:
Encoding.RegisterProvider( CodePagesEncodingProvider.Instance );
Re[2]: HttpListener AuthenticationSchemes.Basic utf-8
От: vaa https://www.youtube.com/playlist?list=PLtrvASfI1KW7VOYRKjglcagQzWLoxlncl
Дата: 17.06.22 09:27
Оценка:
Здравствуйте, Igorxz, Вы писали:

I>Здравствуйте, vaa, Вы писали:


vaa>>Как заставить это чудо прочитать имя и пароль пользователя в utf-8?

vaa>>декодируется неверно. видимо считает что только ascii возможны.

I>ставим пакет System.Text.Encoding.CodePages, потом, где-то:

I>
I>Encoding.RegisterProvider( CodePagesEncodingProvider.Instance );
I>


и старом фрэймворке отработает?
Re[3]: HttpListener AuthenticationSchemes.Basic utf-8
От: Igorxz  
Дата: 17.06.22 09:43
Оценка:
Здравствуйте, vaa, Вы писали:

vaa>Здравствуйте, Igorxz, Вы писали:


I>>Здравствуйте, vaa, Вы писали:


vaa>>>Как заставить это чудо прочитать имя и пароль пользователя в utf-8?

vaa>>>декодируется неверно. видимо считает что только ascii возможны.

I>>ставим пакет System.Text.Encoding.CodePages, потом, где-то:

I>>
I>>Encoding.RegisterProvider( CodePagesEncodingProvider.Instance );
I>>


vaa>и старом фрэймворке отработает?

в старом фрэймворке это не нужно, только в новом.
в старом фрэймворке все работает из коробки, если нет — смотри/ищи у себя.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.