【问题标题】:How to use Windows permissions mechanism?如何使用Windows权限机制?
【发布时间】:2017-01-31 18:47:01
【问题描述】:

刚开始学习WCF,需要用Winforms写一个聊天程序。

我需要创建一个有权使用该聊天程序的本地用户组(使用 Windows)。不属于该组的用户无法使用它。 我已经阅读了它,但我仍然不明白我需要在服务器端做什么才能进行此授权,以及如何确保只有来自该特定组的用户才具有权限。

【问题讨论】:

  • 您打算部署它,还是在一个组织中使用它?无论哪种方式,您所采用的方法听起来都难以支持......如果它在一个组织内,我会让系统管理员手动处理它,而不是尝试从代码中设置它。如果是用于部署,使用传统用户登录或绑定 Azure AD 之类的东西进行身份验证可能会获得更好的运气。
  • 我知道这与 web.config 上的服务授权和行为以及会话有关。
  • 我确信 WCF 包含该功能,但请注意,使用这样的组仅适用于单个域(即 - 工作场所网络)。人们通常在自己的个人计算机上拥有管理员权限,因此他们可以将自己添加到他们想要的任何组中,如果计算机与服务器不在同一个域中,那么我认为它们是不同的“组”,即使本地组具有相同的名称。在客户端,这些东西都在 System.Security.Principal 命名空间中,如果有帮助的话。您可以使用这些类检查用户的安全组。

标签: c# winforms wcf authorization


【解决方案1】:

这似乎是您正在寻找的,尽管我重复警告说这种方法只能在单个域中工作(这通常意味着它只适用于 Intranet):

WCF Web Service Authentication based on AD groups

接受的答案演示了如何通过深入研究此对象以确定组成员身份来捕获向服务发出请求的用户的安全上下文:

WindowsIdentity caller = ServiceSecurityContext.Current.WindowsIdentity;

您需要使用 wsHttp 或 netTcp 绑定(与基本的 HTTP 绑定相反)才能使其工作 - 这些绑定机制提供更多功能,以换取与其他平台的更少互操作性。如果您严格地“在防火墙内”,则 netTcp 绑定通常更有意义,尽管它可能使用防火墙默认阻止的端口。 wsHTTP 使用标准的 HTTP 端口,这些端口通常是开放的。

在客户端,System.Security.Principal 命名空间中的等效对象也允许您在那里执行安全策略。

【讨论】:

    猜你喜欢
    • 2015-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2011-03-04
    • 2021-10-15
    • 1970-01-01
    • 2018-12-06
    相关资源
    最近更新 更多