Элементе httplistener:как получить http-пользователя и пароль?
-
18-09-2019 - |
Вопрос
Я столкнулся с проблемой здесь, с HttpListener .
Когда запрос формы
http://user:password@example.com/
сделано, как я могу получить пользователя и пароль?У HttpWebRequest есть свойство Credentials , но у HttpListenerRequest его нет, и я не нашел имя пользователя ни в одном его свойстве.
Спасибо за помощь.
Решение
То, что вы пытаетесь сделать, это передать учетные данные через HTTP basic auth, я не уверен, поддерживается ли синтаксис username: password в HttpListener, но если это так, вам нужно сначала указать, что вы принимаете basic auth.
HttpListener listener = new HttpListener();
listener.Prefixes.Add(uriPrefix);
listener.AuthenticationSchemes = AuthenticationSchemes.Basic;
listener.Start();
Как только вы получите запрос, вы сможете извлечь имя пользователя и пароль с помощью:
HttpListenerBasicIdentity identity = (HttpListenerBasicIdentity)context.User.Identity;
Console.WriteLine(identity.Name);
Console.WriteLine(identity.Password);
Вот полное объяснение из всех поддерживаемых методов аутентификации, которые можно использовать с HttpListener.
Другие советы
Получить Authorization
заголовок.Его формат выглядит следующим образом
Authorization: <Type> <Base64-encoded-Username/Password-Pair>
Пример:
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Имя пользователя и пароль разделяются двоеточием (в этом примере, Aladdin:open sesame
), затем в кодировке B64.
Сначала вам необходимо включить базовую аутентификацию:
listener.AuthenticationSchemes = AuthenticationSchemes.Basic;
Затем в вашем методе ProcessRequest вы могли бы получить имя пользователя и пароль:
if (context.User.Identity.IsAuthenticated)
{
var identity = (HttpListenerBasicIdentity)context.User.Identity;
Console.WriteLine(identity.Name);
Console.WriteLine(identity.Password);
}