代码之家  ›  专栏  ›  技术社区  ›  Hemant

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

  •  4
  • Hemant  · 技术社区  · 15 年前

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

    1 回复  |  直到 15 年前
        1
  •  7
  •   marc_s Anurag    15 年前

    这样,您就可以使用声明性语法将调用者限制在某些组中:

    [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"> ......
    

            <serviceAuthorization principalPermissionMode="UseAspNetRoles" />
    

    相反

    马克