HttpListener: как получить http пользователя и пароль? - PullRequest
9 голосов
/ 18 июля 2009

У меня проблема с HttpListener.

При запросе формы

http://user:password@example.com/

сделано, как мне получить пользователя и пароль? HttpWebRequest имеет свойство Credentials, но HttpListenerRequest не имеет его, и я не нашел ни одного имени пользователя в этом свойстве.

Спасибо за помощь.

Ответы [ 3 ]

21 голосов
/ 18 июля 2009

То, что вы пытаетесь сделать, это передать учетные данные через базовую аутентификацию HTTP, я не уверен, что синтаксис username: password поддерживается в HttpListener, но если это так, вам нужно будет указать, что вы принимаете базовую аутентификацию первый.

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.

4 голосов
/ 18 июля 2009

Получить заголовок Authorization. Это формат выглядит следующим образом

Authorization: <Type> <Base64-encoded-Username/Password-Pair>

Пример:

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

Имя пользователя и пароль разделяются двоеточием (в данном примере Aladdin:open sesame), затем кодируется B64.

2 голосов
/ 18 июля 2009

Сначала необходимо включить базовую аутентификацию:

listener.AuthenticationSchemes = AuthenticationSchemes.Basic;

Тогда в вашем методе ProcessRequest вы можете получить имя пользователя и пароль:

if (context.User.Identity.IsAuthenticated)
{
    var identity = (HttpListenerBasicIdentity)context.User.Identity;
    Console.WriteLine(identity.Name);
    Console.WriteLine(identity.Password);
}
...