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

时间:2011-02-18 11:10:39

标签: c# claims-based-identity

到目前为止,我发现了两种从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);

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

    有什么建议吗?

    TNX!

1 个答案:

答案 0 :(得分:2)

  1. WindowsIdentity winId = S4UClient.UpnLogon(upn);
  2. 由Excel Services和PerformancePoint服务使用。

    一旦使用它的缓存。还有一些其他检查。