当您需要对特定OperationContracts
进行身份验证时,最佳做法是什么,同时使用默认MembershipProvider
进行安全性(FormsAuthentication
)。
我想在使用Web服务时,Membership.ValidateUser
和Membership.GetUser
只是不会削减它,对吗?
换句话说:如何验证用户是否可以使用Web服务中的特定方法(用户已经过身份验证/“登录”)?
答案 0 :(得分:3)
是的 - 在这种情况下,您无法真正使用FormsAuthentication
。但是,WCF中提供了出色的基础架构,用于管理对单个方法的基于角色的访问:http://msdn.microsoft.com/en-us/magazine/cc948343.aspx
答案 1 :(得分:1)
我已经知道过度工程,所以当我在我的Web应用程序中使用WCF时,我将该服务包装在我的Web应用程序中。这样我的网络应用程序就会调用抽象。
现在,您可以做的是在包装器上应用代码访问安全性(CAS)。
示例代码可能如下所示(为简洁起见省略了大量细节)
internal class ServiceWrapper
{
Service Svc;
public ServiceWrapper()
{
Svc = ServiceClient();
}
[System.Security.Permissions.PrincipalPermission(System.Security.Permissions.SecurityAction.Demand, Role = "HelloWorld")]
public string HelloWorld()
{
return Svc.HelloWorld();
}
}
在一个完美的世界中,我们希望CAS更加干燥(不要重复自己),这意味着你可以按照你的建议在WCF中处理。但是,如果知道你可以锁定你的WCF应用程序并控制谁调用它,那么这可能是一个很好的中间道路: - )
这会帮助你简化球的滚动......
祝你好运!