gpt4 book ai didi

.net-4.5 - 您如何在可移植类库中使用 IPrincipal 和 IIdentity?

转载 作者:行者123 更新时间:2023-12-04 15:22:32 24 4
gpt4 key购买 nike

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

我遇到的问题是这些类和 WIF 通常完全基于“声明”的概念,这太棒了……但是两个接口(interface) IPrincipalIIdentity不是。不仅如此,ClaimsPrincipal类也有一个身份的集合,而不仅仅是一个与之关联的身份。

  • IPrincipal 有 IdentityIsInRole成员。
  • 身份有 AuthenticationType , IsAuthenticated , 和 Name成员。

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

    此外,在极少数情况下,委托(delegate)人具有多个身份,如何获得“非主要”身份?

    最佳答案

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

    public interface IClaimsPrincipal : IPrincipal

    这意味着声明感知类型与使用 IPrincipal 的旧代码兼容和 IIdentity接口(interface)。但是要让您的代码声明知道,您必须添加对 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;

    关于.net-4.5 - 您如何在可移植类库中使用 IPrincipal 和 IIdentity?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23791366/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com