【问题标题】:Acessing user identity in AWS Lambda在 AWS Lambda 中访问用户身份
【发布时间】:2019-02-11 10:34:21
【问题描述】:

我想使用仅对 Cognito 用户组成员可用的 lambda 函数。在该函数中,我想访问刚刚调用该函数的特定用户的身份。到目前为止,我还没有让它工作。

我创建了一个 Cognito 组,并准备了一个带有 JS 的 HTML 页面,可以注册、确认和登录用户。除此之外,我还可以提取身份令牌。

我还在 API Gateway 中创建了一个连接到 Lambda 函数的 API。将授权设置为 Cognito 组效果很好,并且只能使用有效的身份令牌调用该函数。

但是,我不知道如何以及是否可以通过这种方式访问​​ Lambda 函数中的身份。只能使用授权 AWS_IAM 设置“使用调用方凭据调用”标志。反过来,这需要 HTTP 请求中的不同授权,但我不知道我需要在那里做什么。还是我走向了一个完全错误的方向?

在其他线程中,例如 https://forums.aws.amazon.com/thread.jspa?threadID=231032 和文档中,我发现了有关设置请求映射模板的注释,但我在 GUI 中找不到可以执行此类操作的位置。

如果能提供任何帮助,我将不胜感激!如果有更多信息可以提供帮助,请直接询问,我会提供尽可能多的信息。

【问题讨论】:

    标签: amazon-web-services aws-lambda aws-api-gateway amazon-cognito amazon-iam


    【解决方案1】:

    我终于通过 Mapping Templates 得到了调用者的身份。

    要通过 JSON 格式使用映射模板,您需要添加一个模板“application/json”。然后,您可以单击新条目并提供特定模板。就我而言,我使用了

    {
        "name": "$context.authorizer.claims.name",
        "username": "$context.authorizer.claims['cognito:username']"
    }
    

    这会将属性名称和用户名添加到lambda调用中的事件对象中,其中分别包含属性名称和认知用户名的内容。

    【讨论】:

      【解决方案2】:

      可以在 GUI 的 Method -> Integration Response -> Mapping Templates 下找到请求映射模板。

      这样的模板:

      {"testHeader" : "$input.params().header.get('Authorization')"}
      

      将令牌传递给“testheader”下的 lambda。

      还可能值得检查上下文变量 (https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html#context-variable-reference) 以查看它是否包含您需要的信息,尽管我不相信它会,除非您转向自定义授权方身份验证方法。

      【讨论】:

      • 如何设置该模板?我找到扩展面板“映射模板”,但是当我在 Content-Type 表中输入您建议的模板时,出现错误:验证结果:警告:[],错误:[指定的内容类型无效:{“testHeader”: "$input.params().header.get('Authorization')"}] 扩展面板可以在集成请求中找到,而不是在集成响应中,就像您响应的那样。在映射模板下,我有一个选择“请求正文传递”和一个表内容类型,我可以通过按钮“添加映射模板”添加新条目
      猜你喜欢
      • 2020-07-03
      • 2018-11-25
      • 1970-01-01
      • 2020-02-16
      • 2020-11-04
      • 2016-09-27
      • 1970-01-01
      • 2020-06-18
      • 1970-01-01
      相关资源
      最近更新 更多