【问题标题】:Get current process identity and authentication information获取当前进程身份和认证信息
【发布时间】:2013-09-05 19:16:41
【问题描述】:

我在由 Active Directory 控制的域中具有特定身份的服务器中运行 Windows 服务。

我需要通过 TCP 将此服务身份发送到同一网络中的另一个服务,使用我们自己的协议和某种令牌来验证目标服务器中的调用者,类似于 Windows 身份验证如何与 WCF 或 Windows 窗体应用程序一起使用。

有一些方法可以做到这一点(使用 .NET 4.5 和 C#),而我必须使用 AD/Windows 基础架构实现我自己的令牌服务?

【问题讨论】:

  • 我将从 Identity Management in Active Directory 开始。不要自己实现,找到适合您需求的。从头开始正确编写这个非常困难。
  • 是的,我查看了 WIF / ADFS,但我正在考虑更直接的方法,例如生成 Kerberos 票证并将其发送到服务进行验证,但我找不到如何做到这一点在 C# 中(我不确定它是否可能)......

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


【解决方案1】:

我能够使用 SSPI 解决这个问题,就像 bmm60 建议的那样。通过 SSPI,可以使用 Kerberos 和 NTLM 进行身份验证。

本文中有一个用于 SSPI 调用的 C++ 托管程序集: http://msdn.microsoft.com/en-us/library/ms973911.aspx

同一篇文章很好地解释了身份验证过程的工作原理。

我也在这里找到了一个 C# 包装器(但使用起来有点困难): http://www.pinvoke.net/default.aspx/secur32.initializesecuritycontext

基本上,包装器使用 InitializeSecurityContextAcceptSecurityContext Windows 函数来提供功能。

【讨论】:

    【解决方案2】:

    如果您可以利用 IIS 或 WCF 的内置身份验证,那将是最简单的。如果你真的需要一个 TCP 套接字,我认为你必须自己实现身份验证。如果您了解 Kerberos 的工作原理,这在概念上并不困难,但要弄清楚所有要调用的函数的细节需要一段时间。 MSDN 有一个不错的概述here。此外,我不知道这些的任何 C# 包装器,因此您可能需要 p-invoke 全部;考虑用托管 C++ 编写该部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-06
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-28
      • 1970-01-01
      • 2020-02-19
      相关资源
      最近更新 更多