【问题标题】:Cognito authorization with two user pool具有两个用户池的 Cognito 授权
【发布时间】:2021-10-08 17:13:55
【问题描述】:

我有一个 API 网关和两个用户池,我想在支持这两个用户池的端点上实现 Cognito。 我的想法是创建一个 lambda 授权,它将作为输入:access_token 并在/oauth2/userInfo 上执行 两个用户池中的一个,知道如果令牌有效,则只有一个用户池才能满足请求。我的 lambda 返回了

  1. 祝你好 -> "Effect": "Allow",
  2. 为 Get Ko -> "Effect": "Deny"

喜欢在这里解释:link

问题

  • 还有其他方法可以支持对两个池进行授权吗?
  • 使用 access_token 管理授权是否正常?
  • 如果我的 lambda 将 id_token 而不是 access_token 作为输入,我如何验证 id_token 是由我的用户池之一生成的

谢谢!

【问题讨论】:

    标签: python-3.x oauth-2.0 authorization amazon-cognito aws-userpools


    【解决方案1】:

    标准行为

    您的应用应该有一个单独的授权服务器 (AS) 与之通信。可以出于高级目的对用户进行分区,例如 multi-tenancy 或将个人身份信息 (PII) 存储在每个区域的不同数据库中。

    第一季度

    Cognito 用户池是一个完整的授权服务器 - 如果可能,我的目标是只使用一个,因为这将使您的应用程序中的代码保持简单。

    如果您必须使用多个用户池继续使用单个应用程序,请让 API 客户端向您发送一个提示,使您能够知道正在使用哪一个 - 可能通过 API 请求期间自定义标头中的值:

    • x-mycompany-user-region:欧盟
    • x-mycompany-partner-id: ABC

    这将使您能够实现一种基本的基于内容的路由。这种类型的标头仅用于路由,不应用于安全性。

    也可以在 Cognito 前面放置 reverse proxy 来执行此类工作 - 请参阅此 Curity article 了解有关此类方法的详细信息,其中声明用于路由请求。

    第二季度

    是 - 使用包含或引用范围和声明的访问令牌。请注意,Cognito 可能不允许您自定义访问令牌 JWT 内容。

    获取自定义声明的一种方法是将访问令牌发送到用户信息端点,然后将结果缓存在授权方中,就像您正在做的那样。如果有帮助,另请参阅 this code of mine。

    第三季度

    ID 令牌是提供给 UI 的可数字验证的断言,作为身份验证的证明。它不应该用于 API 中的授权。可能是 Cognito 对自定义 ID 令牌有更好的支持 - 但它在 OAuth 术语中是不正确的(例如,到期时间太长/不支持范围)。

    【讨论】:

      猜你喜欢
      • 2018-01-24
      • 2017-09-04
      • 2020-11-27
      • 2022-11-10
      • 2017-10-25
      • 2018-11-19
      • 1970-01-01
      • 2020-05-18
      • 2019-01-24
      相关资源
      最近更新 更多