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

如何将WCF中的服务访问限制为一组windows帐户?,windows,wcf,authentication,Windows,Wcf,Authentication,我有一个使用netTcp绑定和传输安全性的WCF服务。它使用Windows身份验证(默认) 一切都很顺利,但我想确保只有选定的windows用户帐户可以使用此服务,而不是域中的所有人 是否有任何方法可以实现这一点,以便选择的用户帐户可以写入配置文件,服务将使用它们(排除使用属性)?您不能在配置中执行此操作-但由于您使用的是Windows身份验证,您可以方便地使用ASP.NET角色提供程序-基于Active Directory/Windows域角色成员身份,或基于ASP.NET内置角色/成员身份数

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

一切都很顺利,但我想确保只有选定的windows用户帐户可以使用此服务,而不是域中的所有人


是否有任何方法可以实现这一点,以便选择的用户帐户可以写入配置文件,服务将使用它们(排除使用属性)?

您不能在配置中执行此操作-但由于您使用的是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);
}
您可以在配置中定义所有这些:

<behaviors>
  <serviceBehavior>
     <behavior name="WinAuth">
        <serviceAuthorization principalPermissionMode="Windows" />
     </behavior>
  </serviceBehavior>
</behaviors>

然后在配置中将该服务行为分配给您的服务:

<service name="YourService" behaviorConfiguration="WinAuth"> ......
。。。。。。
如果要使用ASP.NET提供的成员资格/角色数据库,请指定

        <serviceAuthorization principalPermissionMode="UseAspNetRoles" />

相反


Marc

我不知道是否可以在配置文件中轻松完成,但您可以始终在服务内部进行检查。此属性是否可以应用于整个类而不是每个方法?PrincipalPermission属性可以添加到类或方法中。如果添加到类中,则类中的每个方法都是授权的。