【问题标题】:IdentityServer4 Multiple API access, single tokenIdentityServer4 多 API 访问,单一令牌
【发布时间】:2018-06-14 18:40:37
【问题描述】:

我们希望通过客户端凭据流向客户端授予访问权限的几个 API。流程会是这样。

  1. 客户端根据某个范围从 is4 获取令牌
  2. 客户端使用令牌访问第一个 API
  3. 客户端需要使用相同的令牌访问第二个 API。

API 端点的令牌授权似乎仅在 APIResource 与身份验证参数中的 APIName 匹配时才有效。

您如何设置 APIResource/Scopes 以适应这种情况?

【问题讨论】:

  • 您的客户端是否有两个 API 的范围?

标签: identityserver4


【解决方案1】:

好的,我有机会研究一下您的情况并找到解决方案。

因此,如您所知,客户端凭据流基于(除了客户端 ID 和客户端密码)ApiResoirces/Scopes。

您的 API 在其身份验证配置中具有:

  • ApiName - 用于 .NET Core API
  • RequiredScopes - 用于 .NET Framework API

根据你的情况,你必须设置它们。

这些是您的 IDS 客户端应在其允许的范围/api 资源 (Client.AllowedScopes) 中拥有的 APIResources/Scopes。

然后,当从令牌客户端请求客户端凭据时,您应该传递一个字符串作为作用域,其中包含两个作用域/apiresource,以间隔 (tokenClient.RequestClientCredentialsAsync("api1 api2");) 分隔

然后,您在响应中收到的访问令牌将对您的两个 api 的调用有效。

您还有第二种选择,您的 api 都使用同一个范围/apiresource,但我认为这根本不是一个好方法。

【讨论】:

  • 这就是把我搞砸的原因。我不知道您可以在 tokenClient.RequestClientCredentialsAsync() 中传递多个范围。智能感知将其作为字符串范围(单数)。非常感谢!
  • 注意,使用相同的access-token 访问两个不同的resource api 是危险的。因为第一个 resource api 可以调用另一个 'resource api' 的端点,反之亦然。尝试为每个resource api 使用单独的访问令牌。更好的解决方案是首先在Identity provider server 中防止这种情况发生,但我只是不知道如何。
猜你喜欢
  • 2019-01-14
  • 2018-09-23
  • 2018-06-08
  • 1970-01-01
  • 1970-01-01
  • 2017-05-14
  • 2018-05-11
  • 2018-10-26
  • 2020-12-09
相关资源
最近更新 更多