获取当前进程标识和身份验证信息

时间:2013-09-05 19:16:41

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

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

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

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

2 个答案:

答案 0 :(得分: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

基本上,包装器使用 InitializeSecurityContext AcceptSecurityContext Windows功能来提供功能。

答案 1 :(得分:0)

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