4

到目前为止,我找到了两种从 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;
    }
}
  1. 只需使用 upn 调用 WindowsIdentity 的构造函数:

    WindowsIdentity winId = new WindowsIdentity(upn);

  2. 使用对 Windows 令牌服务 (c2WTS) 的声明:

    WindowsIdentity winId = S4UClient.UpnLogon(upn);

解决方案 1 对我来说似乎是更简单和更容易的解决方案,但是我不明白 c2WTS 的目的?

有什么建议么?

天呐!

4

1 回答 1

2
  1. WindowsIdentity winId = S4UClient.UpnLogon(upn);

由 Excel Services 和 PerformancePoint 服务使用。

使用后缓存。也有一些其他的检查。

于 2011-05-22T22:24:13.717 回答