HttpListener: как получить пользователя и пароль http?

я столкнулся с проблемой здесь, с HttpListener.

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

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

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

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

3 ответов


то, что вы пытаетесь сделать, это передать учетные данные через 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);
}