具有ASP.NET成员身份,角色和配置文件的WCF身份验证

时间:2011-06-22 15:03:45

标签: wcf security asp.net-membership wcf-security

我有一个WCF服务,它托管在ASP.NET MVC Web应用程序内的IIS 7.0 / 7.5中(通过使用带有ServiceHost指令的.svc文件)。我配置中的安全设置如下所示:

<services>
  <service name="MyServiceLib.MyService">
    <endpoint address="" binding="wsHttpBinding" 
              bindingConfiguration="wsHttpBindingConfig"
              contract="MyServiceLib.IMyService" />
  </service>
</services>

<bindings>
  <wsHttpBinding>
    <binding name="wsHttpBindingConfig">
      <security mode="TransportWithMessageCredential">
        <transport clientCredentialType="None" />
        <message clientCredentialType="UserName" />
      </security>
    </binding>
  </wsHttpBinding>
</bindings>

<behaviors>
  <serviceBehaviors>
    <behavior>
      <serviceCredentials>
        <userNameAuthentication
            userNamePasswordValidationMode="MembershipProvider"
            membershipProviderName="AspNetSqlMembershipProvider"/>
      </serviceCredentials>
    </behavior>
  </serviceBehaviors>
</behaviors>

正如您所看到的,我正在使用SSL进行传输安全性,然后使用用户名和密码对ASP.NET成员资格提供程序进行身份验证。到目前为止,此工作正常。

但我想限制对此服务的访问权限,不仅限于经过身份验证的用户,还包括具有特定角色且在其个人资料中设置了特定值的用户。 (我在Web应用程序中使用SqlProfileProvider,并且每个用户都有一个分配了特定值的配置文件。)

是否可以通过配置设置实现此目的?如果没有,我可以在服务端创建某种自定义身份验证,这将允许我从传入邮件中检索用户和密码,然后检查成员资格和角色,并从配置文件存储中提取配置文件?我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

Enable WCF Role Service怎么样?

否则,你可以implement your own authentication method。您告诉WCF我们想要自己验证用户(执行您自己的校验和/验证方法)

答案 1 :(得分:1)

那么,您可以通过使用'PrincipalPermissionAttribute'

来修改服务中的方法来限制对它们的访问

[PrincipalPermission(SecurityAction.Demand,Role =“User”)] public void MyMethod(){...

您需要将服务配置为使用角色提供程序:

<serviceAuthorization principalPermissionMode="UseAspNetRoles" roleProviderName="SqlRoleProvider" />

但这只会对角色有所帮助。我不认为开箱即用有助于检查用户配置文件中的值:您可以考虑在方法体内手动执行此操作。