基于声明的身份

时间:2013-08-29 15:11:14

标签: c# asp.net asp.net-mvc-4

我有一个我正在研究的项目。它使用Thinktecture Identitity Server将令牌传递给我的应用程序。问题是我需要从令牌中提取声明值,到目前为止我能够进行Linq查询以获取声明值(我能够通过调试在结果中看到它),但是我无法将实际值拉出来,我试着串,toarray等。它一直给我实际的类型。我的代码如下:

var company = ClaimsPrincipal.Current.Identities.ToArray();
        var claimType1 = company[0].Claims.ToArray();
        var claimtest = from x in claimType1 where x.Type == "http://identityserver.thinktecture.com/claims/profileclaims/company" select x.Value;
        String claimfinal = claimtest.ToString();
        ViewBag.Message = claimtest.GetType().ToString() + "  " + claimfinal;

这是输出:

System.Linq.Enumerable+WhereSelectArrayIterator`2[System.Security.Claims.Claim,System.String]  System.Linq.Enumerable+WhereSelectArrayIterator`2[System.Security.Claims.Claim,System.String]

供参考: 这仅在控制器中用于测试目的。理想情况下,我希望能够处理索赔,并在单独的背景类中存储来自它的各种信息

1 个答案:

答案 0 :(得分:3)

claimtest是IEnumerable,您可能只想选择指定类型的第一个声明,然后使用其值:

var claimtest = claimType1
    .First(x => x.Type == "http://identityserver.thinktecture.com/claims/profileclaims/company")
    .Value;