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);
}