【问题标题】:How to get the claims within a JwtBearer-protected API method :)如何在受 JwtBearer 保护的 API 方法中获取声明 :)
【发布时间】:2019-07-11 10:27:41
【问题描述】:

我们目前已使用 JWT 配置了 IdentityServer。我们有大约 8 个 API,每个都有 2-8 个端点。这些端点中的每一个都使用 AuthorizeAttribute 来验证用户是否可以使用端点等。

这一切都很好,但现在我们希望实现多租户。 API授权后有没有办法使用token?

以下是基本流程

  1. 用户点击前端按钮发起 API 调用
  2. API 端点使用身份服务器验证访问令牌
  3. 验证后允许用户访问

在这个阶段之后,我们希望再次使用令牌来查询身份服务器以获取有关用户的详细信息,以允许我们实现多租户

做过很多谷歌搜索等

API 代码如下。每个 API 端点都有 Authorize 标签,该标签针对身份服务器进行自动化,以确保用户可以调用端点。一旦用户被授权,我需要从令牌中提取数据以获取租户

[HttpGet]
    [Route("api/resultset/{userID}")]
    [Authorize]
    public IActionResult Get(int userID){
       //access token here to get details for multi-tenant
}

【问题讨论】:

  • 所以您希望您的 API 端点使用相同的令牌来调用更多的 API?只需要从当前的HttpContext中提取token
  • 您可以在 API 中使用基于策略的授权。您需要检查用户的声明是否在那里有效。对于基于策略的授权,请参考docs.microsoft.com/en-us/aspnet/core/security/authorization/…
  • 如果你说的是access aka bearer token,默认是jwt,所以可以多次使用直到过期。在 IdentityServer 访问 UserInfo 端点的唯一要求是在令牌中有openid 范围——您必须从一开始就请求它。但对我来说,很难理解以上所有内容与多租户的关系。通常租户选择是用户登录过程中的步骤之一,选择之后,租户 id 只是令牌中的一个声明。
  • 如果租户声明在token中,则不需要手动解析。当您在 ConfigureServices 中写入 AddAuthentication().AddJwtBearer 时,它会为您提取声明,以便您可以在 HttpContext 中的 Identity 下获取它们。
  • 谢谢大家的回复,谢谢@mackie

标签: api .net-core authorization identityserver4 authorize-attribute


【解决方案1】:

在您对 API 的调用被成功授权后,来自令牌的声明在 HttpContext 下:

[HttpGet]
[Route("api/resultset/{userID}")]
[Authorize]
public IActionResult Get(int userID){
    //access token here to get details for multi-tenant
    var claims = HttpContext.User.Claims;
}

【讨论】:

    猜你喜欢
    • 2011-03-23
    • 1970-01-01
    • 2017-06-05
    • 1970-01-01
    • 2015-12-29
    • 2014-01-23
    • 2011-08-18
    • 1970-01-01
    相关资源
    最近更新 更多