IdentityServer4 多个API访问,单个令牌

4
我们有几个API,希望通过客户端凭据流授权客户端访问。流程大致如下:
  1. 客户端根据某些范围从is4获取令牌
  2. 客户端使用令牌访问第一个API
  3. 客户端需要使用相同的令牌访问第二个API。
在API端点上对令牌进行授权似乎只有当APIResource与身份验证参数中的APIName匹配时才有效。
如何设置APIResource/Scopes以适应此场景?

你的客户是否为这两个API设置了范围? - m3n7alsnak3
1个回答

4

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

所以,正如您所知道的,客户端凭据流程是基于(除了客户端ID和客户端密码之外的)ApiResoirces/Scopes工作的。

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

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

根据您的情况,您必须对它们进行设置。

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

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

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

您还有第二个选项,即两个API使用同一个范围/API资源,但我认为这绝不是一个好的方法。


1
这就是让我困扰的原因。我不知道在tokenClient.RequestClientCredentialsAsync()中可以传递多个作用域。智能感应将其作为字符串作用域(单数)显示。非常感谢! - Goat
注意,使用相同的“访问令牌”访问两个不同的“资源API”是危险的。因为第一个“资源API”可以调用另一个“资源API”的端点,反之亦然。尝试为每个“资源API”使用单独的访问令牌。更好的解决方案是在“身份提供者服务器”中首先防止这种情况发生,但我不知道如何做到。 - Rzassar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接