1

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

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

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

4

2 回答 2

2

我能够使用 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 函数来提供功能。

于 2013-09-06T17:54:01.217 回答
0

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

于 2013-09-06T16:19:02.483 回答