Как заставить это чудо прочитать имя и пароль пользователя в 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 нет способа это задать, только костылить свою реализацию.