从不记名令牌(Web API)获取自定义声明值

Posted

技术标签:

【中文标题】从不记名令牌(Web API)获取自定义声明值【英文标题】:Getting custom claim value from bearer token (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()));

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

【问题讨论】:

【参考方案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 等声明。

以上是关于从不记名令牌(Web API)获取自定义声明值的主要内容,如果未能解决你的问题,请参考以下文章

在 jwt-auth laravel 中获取自定义声明

ASP.NET Core 和 JSON Web 令牌 - 自定义声明映射

AD B2C - 重新获取令牌后缺少自定义声明

如何从 .NET Core 6.0 中的 JWT 安全令牌中读取自定义声明值

向 ID 令牌 OpenID 添加自定义声明

如何生成包含一些自定义声明的 JWT 访问令牌?