如何在可移植类库中使用IPrincipal和IIdentity



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

我的问题是,这些类,和WIF一般是完全基于"索赔"的概念,这是可怕的…而IPrincipalIIdentity两个接口则不是。不仅如此,ClaimsPrincipal类也有一个身份的集合,而不是一个单一的身份与它相关联。

  • IPrincipal有IdentityIsInRole成员。
  • IIdentity有AuthenticationTypeIsAuthenticatedName成员。

考虑到可移植类库只能访问这两个接口,如何获得实际的声明呢?

另外,在主体具有多个身份的罕见情况下,如何获得"非主"身份?

微软在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;

相关内容

  • 没有找到相关文章

最新更新