Openid 连接中 Web api 的范围

问题描述

我将 Identityserver4 用于 AuthZ 和 AuthN,并试图了解 webapi 范围的用途

我正在实施第一方应用程序,这是一个可在 Intranet 中运行的内部应用程序。所以不会有同意页面。

图片:application architecture

我有 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:read,A:write
  2. 如果用户 Y 登录,access_token 应仅包含作用域 B:read,B:write
  3. 如果用户 Z 登录,access_token 应仅包含作用域 A:read、A:write、B:read、B:write

因为在我的情况下,所有 3 个用户(X、Y、Z)的“Angular front UI”都是相同的。

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

解决方法

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

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

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

另外,请参阅我的回答 here 以了解 ApiSope、ApiResources 和 IdentityResources 之间的区别。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...