HttpListener:如何得到HTTP用户名和密码?(HttpListener: how to

2019-07-30 10:30发布

我在这里面临一个问题,用HttpListener。

当形式的请求

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

由,我怎么能得到的用户名和密码? HttpWebRequest的有凭证的财产,但HttpListenerRequest没有它,我没有发现它的任何属性的用户名。

谢谢您的帮助。

Answer 1:

什么你试图做的是通过通过HTTP凭证基本身份验证,我不知道如果用户名:密码语法在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使用所有支持authenitcation方法。



Answer 2:

获得Authorization头。 它的格式如下

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

例:

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

用户名和口令是冒号分隔(在这个例子中, Aladdin:open sesame ),然后B64编码。



Answer 3:

首先,您需要启用基本身份验证:

listener.AuthenticationSchemes = AuthenticationSchemes.Basic;

然后在您的ProcessRequest方法,你可以得到的用户名和密码:

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


文章来源: HttpListener: how to get http user and password?