通过Cognito用户池中的范围限制用户组中用户的权限

0

【以下的问题经过翻译处理】 假设我在Cognito用户池中定义了一个资源服务,并有5个范围。有两组用户组 - 管理员组和用户组。管理员组将可以访问资源服务器中的所有范围。但我想将某些范围限制到用户组中。我们能否在Cognito用户池中实现这一点?我可以看到被分配资源服务器的范围,但我无法找到将其限制到用户组的方法。任何关于这个问题的提示都将非常有帮助。

profile picture
专家
已提问 2 年前38 查看次数
1 回答
0

【以下的回答经过翻译处理】 你好,

首先,我想提到,范围(scope)是应用程序可以请求对资源的访问级别。这些范围不是基于单个用户、组等,而是在应用程序级别上定义的。 https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-define-resource-servers.html

例如,如果你有一个用于照片的资源服务器,它可能定义了两个范围:一个用于读取照片的访问,另一个用于写入/删除访问的访问。当应用程序发出API调用请求访问并传递访问令牌时,令牌中会嵌入一个或多个范围。

其次,关于应用程序本身,应用程序/应用程序客户端(这两个术语可以互换使用)是在用户池中的实体,其具有调用未经身份验证的API操作的权限。您可以为一个用户池创建多个应用程序。通常,应用程序对应于应用程序的平台。例如,您可能为服务器端应用程序、另一个Android应用程序和另一个iOS应用程序创建一个应用程序。每个应用程序都有自己的应用程序客户端ID。 https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-client-apps.html

在应用程序客户端设置中,您可以定义允许的范围。例如-读取_product、删除_product等。 https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-app-settings.html

现在,例如,如果用户只能访问您的安卓平台(安卓应用程序客户端),而该应用程序客户端在应用程序客户端设置中仅允许使用 read_product 范围。然后,访问此 Android 平台(应用程序客户端)的用户只能获得允许范围为 read_product 的访问令牌。因此,从而将他们的访问权限限制为仅对资源服务器的读取访问权限。你可以有另一个平台(同一 Cognito Userpool 下的另一个应用程序客户端),它允许资源服务器的所有范围。

因此,重申一下,范围是应用程序可以请求资源访问的权限级别。完全由开发者决定哪个平台(应用程序客户端)有哪些允许的范围(那个将获得访问令牌),以及哪个用户群可以访问哪些特定平台(应用程序客户端)来行使精细的限制访问权限。请注意,每个应用程序客户端都有自己的唯一 ID,因此即使发现应用程序客户端/平台位于同一 Cognito Userpool 下,您也可以将它们区分开来。

现在来回答你的问题-

“管理员组将有权访问资源服务器中的所有范围。”

仅当管理员组用户访问的特定平台(应用程序客户端)的应用程序客户端设置具有配置中允许的所有范围时,才会出现这种情况。

“但我想为用户组有某些范围限制。”

当前,Cognito 的范围配置基于应用程序客户端/平台,而不是基于个人/组级别。考虑到该平台/应用程序客户端实际允许的范围,最终用户(成功进行身份验证)将获得出售给特定平台/应用程序客户端的访问令牌。

您应该向管理员用户提供管理员的平台(应用程序客户端)访问权限,同时为其他组的用户提供一个单独的平台(同一 cognito 用户池下的另一个应用程序客户端),允许的范围访问权限较小。

“我们能否在 cognito 用户池中实现这一目标?”

您可以创建自己的 OAuth2.0 资源服务器,并在其中定义自定义范围。然后可以将自定义范围与应用程序客户端相关联,应用程序客户端可以在 OAuth2.0 授权代码授予流程、隐式流程和客户端凭证流中请求这些范围。最后,最终用户访问这些应用程序客户端/平台,这些客户端/平台是根据实际允许的范围定义的。因此,范围的关联位于应用程序客户端/平台层面,最终用户最终会与之进行交互。

最后,最后一点,上面讨论的所有信息都涉及多租户申请惯例,这里详细提到了这些惯例,供你参考-

多租户最佳实践 - https://docs.aws.amazon.com/cognito/latest/developerguide/multi-tenant-application-best-practices.html

可以在这里找到基于多租户的应用程序客户端 - https://docs.aws.amazon.com/cognito/latest/developerguide/application-client-based-multi-tenancy.html

profile picture
专家
已回答 2 年前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则