如何将WCF中的服务访问限制为一组Windows帐户?

我有一个使用netTcp绑定和传输安全的WCF服务。 它使用Windows身份validation(默认)。

一切工作顺利,但我想确保只有一个select的Windows用户帐户可以使用此服务,而不是域中的每个人。

有没有办法做到这一点,select用户帐户可以写在configuration文件和服务将使用它们(排除使用属性)?

您不能在配置中执行此操作 – 但是由于您使用的是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" /> 

代替。

渣子