【问题标题】:Windows Authentication, Custom permissions, WCF, Active DirectoryWindows 身份验证、自定义权限、WCF、Active Directory
【发布时间】:2009-07-23 00:49:41
【问题描述】:

我有一个客户端/服务器项目,与 WCF 通信(目前是命名管道,但可以改变 - 但我不能使用 IIS)。此项目与 Active Directory 集成。

该程序旨在通过充当某种代理来授予用户通常没有权限的权限。用户使用客户端“请求”要执行的任务。只要满足某些条件,服务器就会为客户端执行任务。

其中一个标准是允许用户请求此任务。我的 WCF 服务需要一种方法来保证用户的身份,将其与数据库进行比较,然后执行任务或拒绝任务。

我将如何使用 Windows 身份验证来保证 100% 的用户就是他们所说的那个人?

提前致谢,

迈克

【问题讨论】:

    标签: c# wcf active-directory windows-authentication


    【解决方案1】:

    命名管道的only allowed type of authentication 是 Windows 身份验证(向下滚动到 netNamedPipeBinding)。例如,您可以使用impersonation declareatively ...

    [OperationBehavior(Impersonation = ImpersonationOption.Required)]
    public string GetData(int value)
    {
      return string.Format("Hi, {0}, you have entered: {1}",
                               WindowsIdentity.GetCurrent().Name, value);
    }
    

    获得身份后,您就知道 Windows 已正确验证了此用户,您可以根据您在数据库中的身份检查该身份。

    【讨论】:

    • 是否需要模拟代码?我实际上需要以与请求的用户完全不同的用户身份执行任务。只需在继续之前根据我的数据库检查他们的凭据。这样可以吗?
    • 您只需要冒充即可获得调用者的身份。如果您在没有模拟的情况下获得当前的 Windows 身份,您将获得运行服务的帐户的身份。您只需要检查、获取名称并从您的方法中返回名称。你不必在模拟调用者的方法中做这些工作(事实上,那是你不想做的)。
    【解决方案2】:

    您可以创建自定义ServiceAuthorizationManager 并针对CheckAccessCore 中的用户数据库实施验证。

    How to: Create a Custom Authorization Manager for a Service

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-22
      • 2016-12-15
      相关资源
      最近更新 更多