【问题标题】:Populate Controller field from User claims从用户声明中填充控制器字段
【发布时间】:2016-05-11 06:54:45
【问题描述】:

如何根据用户声明填充控制器字段?我们使用基于声明的身份验证,我对声明值之一感兴趣,即“内部 ID”,它与用户声明一起发送。

我需要提取此声明值并使其可用于我的所有 Web api。我知道我可以使用每个操作方法中的循环从用户声明中提取值。

有没有更好的方法来做到这一点?有点像属性/值提供者​​

【问题讨论】:

    标签: asp.net-mvc claims-based-identity claims


    【解决方案1】:

    您可以创建一个自定义值提供程序,从当前用户身份读取声明,然后拥有一个表示键/值对列表的类,即您的操作方法中的声明/值。

    这将使值提供者填充键/值对,您无需编写任何额外的代码来让用户在任何操作方法中声明

    【讨论】:

      【解决方案2】:

      您可以在 IIdentity 上使用扩展方法来提取声明,我就是这样做的:

          public static int GetInternalId(this IIdentity identity)
          {
              var storedClaim = ((ClaimsIdentity)identity).FindFirstValue("InternalId");
      
              if (string.IsNullOrEmpty(storedClaim)) return 0;
      
              var value = Convert.ToInt32(storedClaim);
              return value;
          }
      

      您可以在任何可以访问 Context 对象(如 Controller 或 ApiController)的地方调用它

      User.Identity.GetInternalId();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-23
        • 1970-01-01
        • 2022-09-29
        相关资源
        最近更新 更多