我有一个使用netTcp绑定和传输安全性的WCF服务。它使用Windows身份验证(默认)。
一切顺利,但我想确保只有一个精选的Windows用户帐户才能使用此服务,而不是域中的所有人。
有没有办法实现这一点,以便可以在配置文件中编写选择的用户帐户,服务将使用它们(使用属性排除规则)?
答案 0 :(得分:7)
您无法在配置中执行此操作 - 但由于您使用的是Windows身份验证,因此可以轻松使用ASP.NET角色提供程序 - 基于Active Directory / Windows域角色成员身份,或基于ASP.NET构建 - 在角色/会员数据库中。
通过这种方式,您可以使用声明性语法将呼叫者限制为某些组:
[ServiceContract]
interface IMyService
{
[OperationContract]
[PrincipalPermission(SecurityAction.Demand, Role="YourCustomRole")]
public string MethodLimitedToGroup(string someInput);
}
任何不是您指定的组成员并尝试调用此方法的人都将收到SecurityException - 但没有其他内容。
您也可以限制一组特定的实际用户名 - 不推荐,但是 - 过于复杂,限制性太强,一般来说:
[ServiceContract]
interface IMyService
{
[OperationContract]
[PrincipalPermission(SecurityAction.Demand, Name="User1")]
[PrincipalPermission(SecurityAction.Demand, Name="User2")]
public string MethodLimitedToGroup(string someInput);
}
您可以在config中定义所有这些:
<behaviors>
<serviceBehavior>
<behavior name="WinAuth">
<serviceAuthorization principalPermissionMode="Windows" />
</behavior>
</serviceBehavior>
</behaviors>
然后只需在配置中将该服务行为分配给您的服务:
<service name="YourService" behaviorConfiguration="WinAuth"> ......
如果要使用ASP.NET提供的成员资格/角色数据库,请指定
<serviceAuthorization principalPermissionMode="UseAspNetRoles" />
代替。
马克