使用WIF(Windows Identity Foundation)4.5,Microsoft创建了WindowsPrincipal
类,这是一种ClaimsPrincipal
类型。当然,这些类不可移植,但它们背后的接口是(IPrincipal
)。实现IIdentity
接口的ClaimsIndentity
类也是如此。
我遇到的问题是这些类和WIF一般完全基于“声明”的概念,这很棒......但是两个接口IPrincipal
和IIdentity
是不。不仅如此,ClaimsPrincipal
类还有一组身份,而不只是一个与之关联的身份。
Identity
和IsInRole
个成员。AuthenticationType
,IsAuthenticated
和Name
成员。鉴于可移植类库只能访问这两个接口,如何获取实际声明呢?
此外,在极少数情况下,委托人具有多重身份,如何获得“非主要”身份?
答案 0 :(得分:4)
Microsoft在Microsoft.IdentityModel.dll
中提供了声明感知类型,这些类型不可移植(我希望 )。那些类型只是扩展了当前的身份类型IPrincipal
:
public interface IClaimsPrincipal : IPrincipal
这意味着声明感知类型与使用IPrincipal
和IIdentity
接口的旧代码兼容。但要使您的代码声明感知,您必须添加对Microsoft.IdentityModel.dll
的引用(不作为PCL提供)或从头开始编写。
如果要在处理声明感知类型的实例时测试旧代码的行为,您可以使用向下转换到IPrincipal
接口:
IClaimsPrincipal claimsPrincipal = new ClaimsPrincipal(new List<IClaimsIdentity>()
{
new ClaimsIdentity("AuthType1"),
new ClaimsIdentity("AuthType2")
});
IPrincipal principal = claimsPrincipal as IPrincipal;
IIdentity identity = principal.Identity;