c# - 如何获取远程登录用户的 WindowsIdentity?

标签 c# c++ wcf authentication windows-identity

我正在开发具有以下详细信息的客户端服务器应用程序:

Client(C++) -----------HTTPS---     Server (C#/WCF)

服务器:

  • 与 Windows Active Directory 域中的用户
  • 在 IIS 中运行的 WCF 服务提供针对 Windows AD 的身份验证服务
  • 提供基于 REST 的身份验证 API,它使用 Windows API logonUser。

客户:

  • 客户端使用 REST SDK(基于 Visual Studio 2013)连接服务器
  • 客户端提供身份验证 API 以使用 HTTPS 进行身份验证。

目前我正在努力验证在服务器上登录客户端的 Windows 用户:

  • AD用户登录客户端调用认证API
  • 必须使用 HTTPS 将当前登录的用户详细信息发送到服务器(当然只有用户名)
  • 使用从客户端检索到的信息创建 WindowsIdentity 结构。

我试过以下方法:

  • 从客户端获取 SID 并将其传递给服务器。从客户端登录的 SID 重新创建 WindowsIdentity。
    • 我无法从传递的 SID 中获取 WindowsIdentity。

问题:

  1. 如何从客户端传递的已登录 AD 用户的 SID 中获取服务器 (C#) 中的 Windows 身份?
  2. 是否有其他更好的方法来实现上述设置?

最佳答案

你试过吗

ServiceSecurityContext.Current.WindowsIdentity.Name

但如果不涉及对 Active Directory 的查询,就无法转换用户名格式。由于是这种情况,因此无需创建 WindowsPrincipal 来检查组成员身份,因为这可能需要与 AD 的另一个连接。 尝试使用 this link 中提供的解决方案

关于c# - 如何获取远程登录用户的 WindowsIdentity?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20351565/

相关文章:

android - OpenGL ES 有不同的 UV 坐标?

c++ - boost序列化库如何检测数组?

c++ - 从不同的二进制名称运行相同的 C++ 程序

c# - 这是一个好的 REST URI 吗?

wcf - OData 身份验证

c# - 在 C# 中提取数据包详细信息

c# - AddDays 在 MVC4 中不起作用?

c# - WCF 服务中的 SQLite AccessViolationException

c# - 将 Lambda 比较器与 PriorityQueue 一起使用

c# - 为什么要实现 IEquatable<T> 接口(interface)