AWS Cognito 资源服务器标识符和范围 资源服务器带来

Max*_*Max 3 scopes oauth-2.0 amazon-cognito

我读过文档并看到了这个。努力将 Cognito + API GW + OAuth2 组合在一起。我的问题:

  1. 我是否正确理解资源服务器范围的流程和使用:客户端应用程序向 Cognito 用户池请求 JWT 令牌(发生登录/授权)。令牌请求包含自定义范围 A,以便 Cognito 返回 JWT 访问令牌。之后,客户端应用程序使用获得的令牌对“资源服务器”(例如我们配置的 API GW 端点)进行 REST API 调用。API GW端点设置为使用我们的Cognito用户池作为授权者+范围设置为自定义范围A。因此这里的范围就像“角色”或“权限”:如果客户端有一个有效的JWT令牌+此令牌有一个自定义范围 内部 + API GW 端点设置为使用该范围 - 然后客户端应用程序被授权调用 API GW 端点。实际上,它的作用就像端点的“基于资源的 IAM 策略”,但这里不涉及 IAM。
  2. 我是否正确理解AWS Cognito 资源服务器标识符是任意字符串?它不是实际“资源服务器”(我们的 API GW)的 URI。URI 格式纯粹用于唯一性,并且在流程中没有 Cognito 资源服务器标识符重要或以某种方式检查/验证的地方?另外,资源服务器标识符似乎不会影响 JWT 令牌生成或令牌内容?

谢谢你的澄清。

And*_*lis 6

    \n
  1. 应用程序范围不应与用户权限混淆。范围定义应用程序的访问权限对用户资源的因此资源访问是两者的重叠:\n
      \n
    • 检查用户是否有访问权限
    • \n
    • 检查应用程序是否具有范围(访问用户访问权限)
    • \n
    \n
  2. \n
\n

例子

\n

2 客户范围:

\n
    \n
  • A:电子商务(产品:创建、产品:删除、订单:创建、订单:更新状态、订单:读取状态)
  • \n
  • B:第 3 方订单跟踪器(订单:读取状态)
  • \n
\n

2 拥有权限的用户:

\n
    \n
  • 客户(订单:创建:拥有,订单:读取状态:拥有)
  • \n
  • 管理员(产品:全部,订单:全部)
  • \n
\n

因此\xe2\x80\xa6

\n
    \n
  • 由于缺少用户权限,客户将 /product 与客户端 A = DENY
  • \n
  • 由于缺少范围,管理员 PUT /product 与客户端 B = DENY\n\xe2\x80\xa6
  • \n
\n
    \n
  1. 正如您所指出的,通过要求 URI,AWS 似乎强制执行了防冲突标识符。这不是一种常见的做法,也没有真正的安全优势,AWS 也不会验证您对资源的控制。
  2. \n
\n