通过默认MembershipProvider进行WebService身份验证

时间:2010-04-02 13:42:57

标签: c# wcf security forms-authentication

当您需要对特定OperationContracts进行身份验证时,最佳做法是什么,同时使用默认MembershipProvider进行安全性(FormsAuthentication)。

我想在使用Web服务时,Membership.ValidateUserMembership.GetUser只是不会削减它,对吗?

换句话说:如何验证用户是否可以使用Web服务中的特定方法(用户已经过身份验证/“登录”)?

2 个答案:

答案 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应用程序并控制谁调用它,那么这可能是一个很好的中间道路: - )

这会帮助你简化球的滚动......

祝你好运!