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

具有ASP.NET成员资格、角色和配置文件的WCF身份验证,wcf,security,asp.net-membership,wcf-security,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="wsH

我有一个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,每个用户都有一个指定了特定值的配置文件。)

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

怎么样


否则,你可以。您告诉WCF,我们希望自己验证用户(执行您自己的校验和/验证方法))

那么,您可以通过使用“PrincipalPermissionAttribute”修饰方法来限制对服务中方法的访问

[PrincipalPermission(SecurityAction.Demand,Role=“User”)] 公共无效MyMethod(){


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


<>但是这只会对角色有帮助。我认为没有任何东西可以帮助检查用户配置文件中的值:你可以考虑在方法主体内手动进行。

HM,我不确定这个角色服务是否会有帮助。“本主题演示如何配置Web服务器上的ASP.NET角色服务,使其能够使用Windows通信基础(WCF)的客户端。"但我不想让客户端可以使用角色,也不能确保客户端使用WCF。我只想检查传入的用户名是否在特定的角色中,纯粹是在服务器端。@Slauma:启用怎么样?我想,WCF角色服务只是有另一个目的——有或没有
aspNetCompatibilityMode
,而不是我需要的。But自定义验证实际上很容易实现,而且工作正常。感谢这条提示!我尝试过,但总是出现异常:“请求主体权限失败。”-无论用户是否为我指定的角色。这可能仅适用于Windows身份验证中的用户组,而不适用于ASP.NET角色吗?您需要将服务配置为使用角色提供程序:感谢此提示!我现在使用了自定义验证(因为我仍然需要访问配置文件)。您可以将上一条评论编辑到您的答案中(以防其他人在此处找到),因为这是使您的解决方案与ASP角色提供程序一起工作的重要信息。