6

在 WIF(Windows Identity Foundation)4.5 中,Microsoft 创建了WindowsPrincipal该类,它是ClaimsPrincipal. 当然,这些类是不可移植的,但它们背后的接口是 ( IPrincipal)。实现接口的ClaimsIndentity类也是如此。IIdentity

我遇到的问题是这些类和 WIF 通常完全基于“声明”的概念,这太棒了……但是这两个接口IPrincipalIIdentity没有。不仅如此,ClaimsPrincipal该类还具有一组身份,而不仅仅是与其关联的单个身份。

  • IPrincipal 拥有IdentityIsInRole成员。
  • IIidentity 有AuthenticationTypeIsAuthenticatedName成员。

鉴于可移植类库只能访问这两个接口这一事实,如何获得实际声明?

此外,在主体具有多个身份的罕见情况下,如何获得“非主要”身份?

4

1 回答 1

4

Microsoft 提供了Microsoft.IdentityModel.dll不可移植的声明感知类型(我希望如此)。这些类型只是扩展了当前的身份类型,例如IPrincipal

public interface IClaimsPrincipal : IPrincipal

这意味着声明感知类型与使用IPrincipalIIdentity接口的旧代码兼容。但是要使您的代码声明知道您必须添加对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;
于 2014-06-19T07:51:38.203 回答