Openid connect 中的 Web api 作用域



我正在使用Identityserver4进行AuthZ和AuthN,并试图理解webapi的作用域的目的

我正在实现一个第一方应用程序,一个将在内部网工作的内部应用程序。 所以不会有同意页面。

图片 : 应用程序架构

我有 3 个用户

  1. 用户 X:只能在 Web API 'A' 上执行读写操作
  2. 用户 Y:只能在 Web API 'B' 上执行读写操作
  3. 用户 Z:可以在 Web API"A"和"B"上执行读写操作

由于所有用户都将使用"Angular 前端"登录。登录时在前面请求的范围必须如下所示

{
response: code
scopes : ‘openid A:read A:write B:read B:write’
}

正如我之前所说,我正在使用 Identityserver4,一旦用户成功登录,客户端将收到Id_token和access_token。 我从不同的文章中了解到,api 将检查范围以提供对读取和写入等操作的访问。所以

  1. 如果用户 X 登录,则access_token应仅包含范围 A:读取、A:写入
  2. 如果用户 Y 登录,则access_token应仅包含范围 B:读取,B:写入
  3. 如果用户 Z 登录,则access_token应仅包含范围 A:读取、A:写入、B:读取、B:写入

由于在我的情况下,所有 3 个用户(X、Y、Z)的"角度前端 UI"都是相同的。

  1. 客户端将请求所有范围(A:读取,A:写入,B:读取,B:写入)是否正确?
  2. 生成access_token时是否需要编写任何自定义逻辑,它应该只包括用户有权的范围?
  3. 如果我必须编写此自定义逻辑,则需要实现哪个接口。 是IProfileService吗?。 我必须使用类似角色的东西来找出范围?
  4. 最后,换句话说,Web API 的范围只不过是权限,我说得对吗?

在IdentityServer中,我会创建一个ApiScope(可能命名为ApiAccess)。然后,我将创建两个 ApiResources,每个 API 一个,并将它们与之前创建的 ApiScope 相关联。

然后有一个与 ApiScope 关联的UserClaim(可能名为access),其中包含特定用户的访问权限(读取或写入)。

然后从用户数据库中检索访问声明的值。

另外,请在此处查看我的回答,以了解ApiSope,ApiResources和IdentityResources之间的澄清。

为了补充这个答案,我写了一篇博客文章,更详细地介绍了这个主题: IdentityServer – IdentityResource vs. ApiResource vs. ApiScope

相关内容

  • 没有找到相关文章

最新更新