【发布时间】:2019-07-11 10:27:41
【问题描述】:
我们目前已使用 JWT 配置了 IdentityServer。我们有大约 8 个 API,每个都有 2-8 个端点。这些端点中的每一个都使用 AuthorizeAttribute 来验证用户是否可以使用端点等。
这一切都很好,但现在我们希望实现多租户。 API授权后有没有办法使用token?
以下是基本流程
- 用户点击前端按钮发起 API 调用
- API 端点使用身份服务器验证访问令牌
- 验证后允许用户访问
在这个阶段之后,我们希望再次使用令牌来查询身份服务器以获取有关用户的详细信息,以允许我们实现多租户
做过很多谷歌搜索等
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