.NET 3.5/VS 2008上ASP.NET Web服务的自定义HTTP基本身份验证
我正在重构一个正在工作的ASP.NET Web应用程序,以使用ASP.NET Web服务公开Web服务接口。据介绍,通过https进行基本身份验证是一种可行的方法。让我们假设是这样,而不是使用WS-Security、X509等 在.NET 3.5/VS 2008上,实现自定义http基本身份验证(非Windows帐户)的最简单方法是什么,例如,仅当用户名为“foo”,密码为“bar”时才接受。最后,我想设置.NET 3.5/VS 2008上ASP.NET Web服务的自定义HTTP基本身份验证,asp.net,web-services,security,.net-3.5,basic-authentication,Asp.net,Web Services,Security,.net 3.5,Basic Authentication,我正在重构一个正在工作的ASP.NET Web应用程序,以使用ASP.NET Web服务公开Web服务接口。据介绍,通过https进行基本身份验证是一种可行的方法。让我们假设是这样,而不是使用WS-Security、X509等 在.NET 3.5/VS 2008上,实现自定义http基本身份验证(非Windows帐户)的最简单方法是什么,例如,仅当用户名为“foo”,密码为“bar”时才接受。最后,我想设置Thread.CurrentPrincipalset 我是否编写自己的HttpModule
Thread.CurrentPrincipal
set
我是否编写自己的
HttpModule
,或者可以更简单一些?如果您正在考虑WCF,您可以使用usernameOverTransport安全性进行基本的httpbinding。i、 e.用户名和passowrd驻留在请求的SOAP头中,所有通信都通过SSL加密进行保护
自定义UserNamePasswordValidator验证器可用于根据数据库等对传入凭据进行身份验证
您可以在服务行为中的自定义IAuthorizationPolicy中设置线程主体
e、 g.评估IAuthorizationPolicy设置当前主体的方法实现
public bool Evaluate(EvaluationContext evaluationContext, ref object state)
{
Object obj;
if( evaluationContext.Properties.TryGetValue( "Identities", out obj ))
{
// get the authenticated identity
IIdentity client = (obj as IList<IIdentity>)[0];
evaluationContext.Properties["Principal"] = ... // create principal obj here for the identity
// this will set thread's current principal
}
return true;
}
public bool Evaluate(EvaluationContext EvaluationContext,ref对象状态)
{
对象对象对象;
if(evaluationContext.Properties.TryGetValue(“标识”,out obj))
{
//获取经过身份验证的身份
IIdentity客户端=(对象作为IList)[0];
evaluationContext.Properties[“Principal”]=…//在此处为标识创建Principal obj
//这将设置线程的当前主体
}
返回true;
}
获取授权
标题的值,对其进行解析并验证用户名/密码
该值是username:password,编码为Base64字符串
有关详细信息,请参阅
Edit:如果您希望使用自定义身份验证方案对每个请求执行此操作,那么编写HttpModule
来处理头解析和设置线程主体将更容易。很可能使用,编写方式是。WCF 3.5的传输安全用户名不能用于IIS托管服务,尽管我的问题是关于ASP.NET Web服务而不是WCF
还有一个HTTP模块的实现,名为
虽然这不是我想要的,但我发现这是一个信息丰富的解决方法。通过http以明文发送密码显然是不安全的,但是这个示例可以扩展以添加更多的安全性,例如在https上运行或发送“密码+一次性GUID+时间戳”的散列。我希望用户和密码在http头中,而不是SOAP头中。此外,usernameOverTransport在IIS上也不起作用:usernameOverTransport for basicHttpBinding即使在IIS中也能正常工作,我不久前已经将解决方案部署到了生产环境中。请记住,在IIS中配置的不是基本身份验证。它处于soap消息级别。