从不记名令牌(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)获取自定义声明值的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET Core 和 JSON Web 令牌 - 自定义声明映射