我有一个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,并且每个用户都有一个分配了特定值的配置文件。)
是否可以通过配置设置实现此目的?如果没有,我可以在服务端创建某种自定义身份验证,这将允许我从传入邮件中检索用户和密码,然后检查成员资格和角色,并从配置文件存储中提取配置文件?我怎么能这样做?
答案 0 :(得分:1)
否则,你可以implement your own authentication method。您告诉WCF我们想要自己验证用户(执行您自己的校验和/验证方法)
答案 1 :(得分:1)
那么,您可以通过使用'PrincipalPermissionAttribute'
来修改服务中的方法来限制对它们的访问[PrincipalPermission(SecurityAction.Demand,Role =“User”)] public void MyMethod(){...
您需要将服务配置为使用角色提供程序:
<serviceAuthorization principalPermissionMode="UseAspNetRoles" roleProviderName="SqlRoleProvider" />
但这只会对角色有所帮助。我不认为开箱即用有助于检查用户配置文件中的值:您可以考虑在方法体内手动执行此操作。