HttpListener:如何获取http用户和密码?

时间:2009-07-18 11:23:19

标签: c# passwords httplistener

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

当表格的请求

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

制作完成后,如何获取用户名和密码? HttpWebRequest有一个Credentials属性,但是HttpListenerRequest没有它,我没有在它的任何属性中找到用户名。

感谢您的帮助。

3 个答案:

答案 0 :(得分:21)

您尝试做的是通过HTTP基本身份验证传递凭据,我不确定HttpListener是否支持username:password语法,但如果是,则需要指定您接受基本身份验证第一

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方法的

Here's a full explanation

答案 1 :(得分:4)

获取Authorization标题。它的格式如下

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

示例:

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

用户名和密码是冒号分隔的(在此示例中为Aladdin:open sesame),然后是B64编码。

答案 2 :(得分:2)

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

listener.AuthenticationSchemes = AuthenticationSchemes.Basic;

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

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