【问题标题】:Getting custom claim value from bearer token (Web API)从不记名令牌(Web API)获取自定义声明值
【发布时间】:2014-12-22 14:48:39
【问题描述】:

在我的 ASP.NET Web API 项目中,我正在使用不记名令牌授权,并为其添加了一些自定义声明,如下所示:

var authType = AuthConfig.OAuthOptions.AuthenticationType;
var identity = new ClaimsIdentity(authType);
identity.AddClaim(new Claim(ClaimTypes.Name, vm.Username));

// custom claim
identity.AddClaim(new Claim("CompanyID", profile.CompanyId.ToString()));

有没有什么方法可以在控制器中访问这个额外的声明值,而无需额外访问数据库?

【问题讨论】:

    标签: asp.net asp.net-web-api claims-based-identity bearer-token


    【解决方案1】:

    当然,在受保护的控制器中,您可以执行以下操作:

     ClaimsPrincipal principal = Request.GetRequestContext().Principal as ClaimsPrincipal;
     var customClaimValue = principal.Claims.Where(c => c.Type == "CompanyID").Single().Value;
    

    【讨论】:

    • 如何以更集中的方式重用它?我正在使用需要的服务层,即这个customClaimValue。所有控制器操作都需要在获取/发布数据之前将此值发送到服务。
    • 您可以创建自定义过滤器,在点击您的操作方法之前运行
    • 谢谢,不知道您可以在过滤器中获取当前请求。还有一个非常好的博客,Taiseer!
    • 就个人而言,我在管道的早期使用自定义 owin 中间件执行此操作。然后我可以在任何地方从 owin 访问“CompanyID”。
    • 当 OWIN 服务器位于我们用来从 Web 项目获取身份验证的 WebAPI 项目中时,我们如何做到这一点?我有一个 WebAPI,它集中了我们所有应用程序的所有业务/身份验证,我有一个需要控制监管并使用 API 获取不记名令牌的网站。但后来我想根据收到的令牌来规范对网站控制器的访问,其中包含诸如角色、公司 ID 等声明。
    猜你喜欢
    • 1970-01-01
    • 2014-03-09
    • 2019-11-14
    • 2017-09-05
    • 1970-01-01
    • 2016-12-14
    • 1970-01-01
    • 1970-01-01
    • 2016-06-26
    相关资源
    最近更新 更多