使用WIF(Windows Identity Foundation)4.5,Microsoft创建了 WindowsPrincipal
类,它是 ClaimsPrincipal
的一种。当然,这些类不是可移植的,但是它们后面的接口(interface)是(IPrincipal
)。可以实现ClaimsIndentity
接口(interface)的 IIdentity
类也可以这样说。
我的问题是这些类以及WIF通常完全基于“声明”的概念,这真棒……但是两个接口(interface)IPrincipal
和IIdentity
却不是。不仅如此,ClaimsPrincipal
类还具有一组Identities,而不仅仅是与之关联的单个Identity。
Identity
和IsInRole
成员。 AuthenticationType
,IsAuthenticated
和Name
成员。 考虑到可移植类库只能访问这两个接口(interface)的事实,如何获得实际的声明?
此外,在极少数情况下,委托(delegate)人具有多个身份,一个人如何获得“非主要”身份?
最佳答案
Microsoft在Microsoft.IdentityModel.dll
中提供了声明感知类型,该类型不可移植(但我希望如此)。这些类型只是扩展了当前的身份类型,例如IPrincipal
:
public interface IClaimsPrincipal : IPrincipal
这意味着声明感知类型与使用
IPrincipal
和IIdentity
接口(interface)的旧代码兼容。但是要使您的代码声明清楚,您必须添加对Microsoft.IdentityModel.dll
的引用(该引用不能作为PCL使用)或从头开始编写。如果要测试处理声明感知类型的实例时旧代码的行为,可以只使用向下转换到
IPrincipal
接口(interface):IClaimsPrincipal claimsPrincipal = new ClaimsPrincipal(new List<IClaimsIdentity>()
{
new ClaimsIdentity("AuthType1"),
new ClaimsIdentity("AuthType2")
});
IPrincipal principal = claimsPrincipal as IPrincipal;
IIdentity identity = principal.Identity;
关于.net-4.5 - 您如何在可移植类库中使用IPrincipal和IIdentity?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23791366/