【问题标题】:How to retrieve custom JWT claims from within Lambda with Identity Pool?如何使用身份池从 Lambda 中检索自定义 JWT 声明?
【发布时间】:2022-12-11 11:48:03
【问题描述】:

我有以下场景,并试图了解实现它的正确方法。

我有 Okta 作为我的 IDP。用于管理我的 API 和一些处理 API 请求的 lambda 的 Amazon API 网关。身份池用于向访问 API 的客户端提供 AWS 凭证。

当客户端访问 API 时,我需要我的 lambda(处理请求)从 DynamoDB 获取数据,并根据登录到客户端的用户特定的一些属性对其进行过滤。例如我需要使用 API 检索客户的帐户,但用户只能访问某些帐户,因此 lambda 应该过滤结果。

我正在考虑为 Okta 中的每个用户定义一些自定义声明。当客户端使用 Okta 进行身份验证时,它会收到一个包含这些声明的 JWT 令牌。它使用此令牌从身份池中获取 AWS 凭证,以访问 API。 API 会触发 lambda。在这里,我想检索声明并使用它们来过滤数据。

关于如何实现这一目标的任何想法?或者有更好的方法来解决这个问题吗?

谢谢你。

【问题讨论】:

  • 嗯,你真的需要这里的身份池吗? API Gateway Lambda 授权方对您不起作用?
  • 让我探索 API Gateway Lambda 授权方。我不知道他们是如何工作的。谢谢你。

标签: aws-lambda jwt amazon-cognito aws-identitypools


【解决方案1】:

对于这种情况,我们可以使用 Lambda 授权方。请根据您的 API 类型参考以下文档之一。

  1. REST APIs
  2. HTTP APIs

    (从概念上讲,两个 Lambda 授权者或多或少是相同的。)

    你要做的是:

    • 在 Lambda Authorizer 中验证传入的 JWT(由 Okta 生成)。然后仅当令牌有效时才执行以下步骤。
    • 基于自定义声明(您在 Okta 中为每个用户配置),在 Lambda 授权器输出的 context 中创建键值对(如 here 中所述)或here)
    • 然后那些 context 详细信息可用于执行数据库查找的 Lambda。有了它,您就可以进行过滤。

【讨论】:

    【解决方案2】:

    API网关路由可以使用内置授权JWT 授权者,事实证明这是从令牌访问我的自定义声明的最简单方法。 JWT 授权方使用 JWT 声明更新事件中的 requestContext,集成到路由的 Lambda 可以访问这些声明。

    但是,lambda 授权方将提供更多的灵活性(如建议的那样@sampath-dilhan) 例如如果您想向上下文添加任何其他属性。

    {
        "requestContext" : {
            "accountId": "121212121",
            "appid": "6adqwerk8",
            "authorizer" : {
                "jwt": {
                    "claims": {
                        "aud": "api://default",
                        .
                        .
                        .
                        "mycustomclaim": "customvalue"
                    },
                    "scopes": "xyz"
                }
            }
            .
            .
            .
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-08
      • 2021-08-22
      • 2015-03-18
      • 1970-01-01
      • 2022-01-20
      • 2021-04-03
      • 2018-07-04
      • 2019-02-26
      相关资源
      最近更新 更多