到目前为止,我找到了两种从 ClaimsIdentity 获取 WindowsIdentity 对象的解决方案。首先,我提取用户主体名称 (upn)。
ClaimsIdentity ci = (ClaimsIdentity) Thread.CurrentPrincipal.Identity;
string upn = null;
foreach (Claim c in ci.Claims)
{
if (c.ClaimType == ClaimTypes.Upn)
{
upn = c.Value;
break;
}
}
只需使用 upn 调用 WindowsIdentity 的构造函数:
WindowsIdentity winId = new WindowsIdentity(upn);
使用对 Windows 令牌服务 (c2WTS) 的声明:
WindowsIdentity winId = S4UClient.UpnLogon(upn);
解决方案 1 对我来说似乎是更简单和更容易的解决方案,但是我不明白 c2WTS 的目的?
有什么建议么?
天呐!