我有一个使用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" />
代替。
渣子