加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

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

发布时间:2020-12-14 01:36:32 所属栏目:Windows 来源:网络整理
导读:我有一个WCF服务,它使用netTcp绑定和传输安全性.它使用 Windows身份验证(默认). 一切顺利,但我想确保只有一个选择的Windows用户帐户可以使用此服务而不是域中的每个人. 有没有办法实现这一点,以便选择用户帐户可以写在配置文件中,服务将使用它们(使用属性排
我有一个WCF服务,它使用netTcp绑定和传输安全性.它使用 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);
}

您可以在config中定义所有这些:

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

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

<service name="YourService" behaviorConfiguration="WinAuth"> ......

如果要使用ASP.NET提供的成员资格/角色数据库,请指定

<serviceAuthorization principalPermissionMode="UseAspNetRoles" />

代替.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读