【问题标题】:Clarification on Identityserver 4 protecting API scopes with ApiResources关于 Identityserver 4 使用 ApiResources 保护 API 范围的说明
【发布时间】:2021-04-15 18:15:43
【问题描述】:

我不太了解使用 APIResource 和 APIScopes 保护 API

我有一个调用 .Net API 的 Angular 客户端应用程序,比如说 API1、Api2,我如何定义 APIResource 中的值。

迁移后,我正在查看 Identity server4(版本 4.0.0)数据库表。我找到了如下表格

  1. API 资源

  2. ApiResourceScopes

  3. ApiResourceClaims

  4. ApiResourceProperties

  5. ApiResourceSecrets

  6. ApiScopes

  7. ApiScopeClaims

  8. ApiScopeProperties

我的理解是我们可以使用 1-5 个表进行 API 设置,也可以使用 6-8 个表。我尝试使用表 1-5。在 ApiResources 、ApiResourceScopes 和 ApiResourceClaims 中添加值但低于错误

[18:03:53 Debug] IdentityServer4.EntityFramework.Stores.ResourceStore
Found ["TestAPI.Read"] scopes in database

表格中的值

  1. ApiResourceClaims 表有什么用?这是返回用户使用访问令牌声明吗?

  2. 如何从客户端访问此范围?

  3. 还有其他表吗,需要添加数据吗?

【问题讨论】:

    标签: database api identityserver4


    【解决方案1】:

    首先我建议你阅读我的回答here

    • ApiResourceClaims 表有什么用?这是返回用户使用访问令牌声明吗?

    它包含将包含在访问令牌中的用户声明列表。意思是,它将从用户数据库中获取的声明的名称。

    • 如何从客户端访问此范围?

    您需要绑定一个 ApiScope。您要求一个 ApiScope,然后将包含一个或多个 ApiResources。

    ApiResources 代表系统中的各个 API。因此,每个 API 都有一个 ApiResource。您使用 ApiResource 名称和密钥让各个 API 针对 IdentityServer 进行身份验证并登录以获取有关访问令牌的详细信息 (Token introspection)

    我认为我下面的这张图片显示了各个部分之间的关​​系:

    客户端请求一个 ApiSCope,然后它将创建一个访问令牌,该令牌将授予对一个或多个 ApiResources 的访问权限。每个 ApiResource 都可能使用 userclaims 请求您希望在访问令牌中显示的其他用户信息。也许用于 API 中的授权步骤。确定用户是否真的被允许进入。

    【讨论】:

    • 感谢托雷的回答。我仔细阅读了您的答案,以下是我的理解 1) 我的理解是 [dbo]。[ApiResources] 用于将范围分组到一个 API 名称下。这仅用于参考目的,除了我没有发现这些有任何用途吗? 2) 如果您定义了 ApiResourceScopes 但如果 ApiScopes 中未定义范围,那么它会引发 Invalid scope 错误? 3) [dbo].[ApiResourceClaims] 和 ApiResourceSecrets 有什么用?任何使用它的实时示例?
    • 正如我在回答中所说,您作为 ApiScopes 的客户提出要求,这将使您能够访问一个或多个 ApiResources。我认为仅将 ApiResources 与 ApiScopes 一起使用是没有任何意义的。您使用 ApiScopes 对一个或多个 API (ApiResources) 进行分组。这将影响访问令牌中的受众声明。
    • 再次感谢。现在我很清楚 ApiResourceClaims --> 调用特定资源范围 (ApiResourceScopes) 时返回的用户声明......你能解释一下 ApiResourceSecrets 的使用并给出 ApiResources 和 ApiScopes 的实时示例吗?很抱歉询问更多细节,这是为了确认我的理解是正确的。提前致谢
    • 更新了我的答案,有帮助吗?如果您接受,请随时将我的答案标记为已接受。
    猜你喜欢
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-03
    • 2021-03-01
    • 2012-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多