Элементе httplistener:как получить http-пользователя и пароль?

StackOverflow https://stackoverflow.com/questions/1147308

  •  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);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top