具有ASP.NET成员资格、角色和配置文件的WCF身份验证
我有一个WCF服务,它托管在ASP.NET MVC web应用程序内部的IIS 7.0/7.5中(通过使用带有具有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
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角色提供程序一起工作的重要信息。