C# 通过默认成员身份提供程序进行Web服务身份验证

C# 通过默认成员身份提供程序进行Web服务身份验证,c#,wcf,security,forms-authentication,C#,Wcf,Security,Forms Authentication,当您需要验证特定的操作合同,同时使用默认的成员身份提供程序进行安全(表单身份验证)时,最佳做法是什么 我想使用WebServices时,使用Membership.ValidateUser和Membership.GetUser不会减少它,对吧 换句话说:我如何验证用户是否被允许在Web服务中使用特定方法(用户是否经过身份验证/登录)?是的--在这种情况下,您不能真正使用表单身份验证。但是WCF中有优秀的基础设施可用于管理对单个方法的基于角色的访问:众所周知,我对事情进行了过度设计,因此当我在web

当您需要验证特定的
操作合同
,同时使用默认的
成员身份提供程序
进行安全(
表单身份验证
)时,最佳做法是什么

我想使用WebServices时,使用
Membership.ValidateUser
Membership.GetUser
不会减少它,对吧


换句话说:我如何验证用户是否被允许在Web服务中使用特定方法(用户是否经过身份验证/登录)?

是的--在这种情况下,您不能真正使用
表单身份验证。但是WCF中有优秀的基础设施可用于管理对单个方法的基于角色的访问:

众所周知,我对事情进行了过度设计,因此当我在web应用程序中使用WCF时,我会将服务包装在web应用程序中。这样,我的web应用程序调用抽象

现在,您可以在包装器上应用代码访问安全性(CAS)

示例代码可能如下所示(为了简洁起见,省略了大量细节)

在一个完美的世界中,我们希望CAS更加干燥(不要重复),这意味着按照您的建议在WCF中处理。但是,如果你知道你可以锁定你的WCF应用程序并控制谁调用它,那么这可能是一个很好的中间路线:-)

这将帮助你简化让球滚动


祝你好运

好的,但是你怎么做认证部分呢?我的示例假设您已经有表单身份验证设置和角色提供程序。如我的示例所示,方法上的PrincipalPermission属性基本上执行HttpContext.Current.User.IsInRole(RoleName)的检查,如果结果为false,它将抛出SecurityException。
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();
    }
}