从ClaimsIdentity检索WindowsIdentity的最佳方法是什么

到目前为止,我发现了两个从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 =新的WindowsIdentity(upn);

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

    WindowsIdentity winId = S4UClient.UpnLogon(upn);

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

有什么建议?

TNX!

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

由Excel Services和PerformancePoint服务使用。

它的缓存曾经使用过。 还有一些其他检查。