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

基于AD组的WCF Web服务身份验证

发布时间:2020-12-14 21:15:49 所属栏目:资源 来源:网络整理
导读:我有一个由C#客户端应用程序使用的WCF Web服务,我还有4个组存储在Active Directory中.客户端应用程序应通过传递登录凭据来连接此Web服务. 需求: 根据存储在AD(Active Directory)中的Windows用户凭据组限制Web服务功能 将特定用户凭据从客户端应用程序传递到
我有一个由C#客户端应用程序使用的WCF Web服务,我还有4个组存储在Active Directory中.客户端应用程序应通过传递登录凭据来连接此Web服务.

需求:

>根据存储在AD(Active Directory)中的Windows用户凭据组限制Web服务功能
>将特定用户凭据从客户端应用程序传递到此Web服务

题:

如何在连接到此Web服务时对登录用户进行身份验证或验证,将调用哪个事件处理函数来验证登录的用户凭据.

如果有人知道这件事,请告诉我

解决方法

你需要将两个概念区分开来:

> AUTHENTICATION是确定是谁呼唤你的过程,并确保他确实是他声称的那个人;这可以使用用户名/密码,Windows凭据(他已经通过登录验证自己的Windows框)或要求调用者获得一些信息(证书)来完成
>授权是一个过程 – 一旦你知道谁在呼唤你,确定呼叫者可以做什么(或他不能做什么)

要使用Active Directory组,您需要在WCF中使用支持Windows凭据的安全模式.最简单的方法是从头开始使用Windows凭据,这是wsHttpBinding和netTcpBinding的默认值 – 在这种情况下,调用者将始终在每次调用时传递他的Windows凭据,并且您可以通过查看服务器端来检查服务器端的那些凭据. ServiceSecurityContext.Current.WindowsIdentity:

WindowsIdentity caller = ServiceSecurityContext.Current.WindowsIdentity;

这在Intranet场景中运行良好 – 无论如何,每个人都在公司防火墙后面并在他们的机器上进行身份验证.为了实现这一点,只需使用wsHttp或netTcp绑定(在这种情况下我推荐使用netTcp).

另一个稍微复杂的情况是,当您的客户端提供X.509证书,然后您将服务器端的映射映射到网络中的现有AD用户.然而,那是相当先进的.

一旦您的呼叫者通过身份验证,例如您知道谁在呼叫,您可以使用常规的基于角色的安全模型来限制权限.只需将[PrincipalPermission(….)]属性添加到要保护的方法中,如果用户不符合任何这些要求,则抛出安全异常并且不会执行该方法.

[PrincipalPermission(SecurityAction.Demand,Role = "Administrators")]
    [PrincipalPermission(SecurityAction.Demand,Name = "JohnDoe")]
    public string SayHello(string caller)
    {
     ......
    }

你可以拥有多个“PrincipalPermission”属性,并且它们以“OR”方式匹配在一起 – 如果它们中的任何一个与当前调用者匹配,他将被允许进行调用.

有关如何使用基于角色的安全性的更多详细信息,请查看本文第Fundamentals of WCF Security页的第4页.

渣子

(编辑:李大同)

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

    推荐文章
      热点阅读