如果其他人偶然发现了这一点,我认为这会对您有很大帮助。
请注意,这只适用于您使用 Cognito 用户池授权器的情况。如果您想将 AWS_IAM 与 Cognito Identitys 一起使用,请查看我的 github 示例 https://github.com/VictorioBerra/js-cognito-auth-example(请阅读下面的编辑区域)
如果您选中了“使用 Lambda 代理集成”,那么您将无权访问请求模板映射。但是您可以在 lambda 函数中访问令牌内的声明:
exports.handler = (event, context, callback) => {
//create a response
const response = {
statusCode: 200,
body: JSON.stringify({
"user email": event.requestContext.authorizer.claims.email,
}),
};
callback(null, response);
};
编辑 - 有关使用 AWS_IAM 作为 APIG 授权方的更多信息
基本上,您需要使用 AWS_IAM 保护您的 APIG,并且您必须通过 Cognito 联合身份进行身份验证,该身份将返回 sessionToken example using user pools。这就是使 AWS IAM 凭证临时的原因。 现在您拥有了向 APIG 进行身份验证所需的一切。
要对此进行测试,请下载postman 的桌面版本,输入您的 API URI(从阶段区域获取),然后在授权下填写 Sig4 签名所需的 5 个字段。您将看到 lambda 函数中的“event.identity”对象加载了诸如user 对象之类的属性。
如果您想使用 APIG 自动生成的 SDK,它内置了一个工厂,该工厂采用 accessKey、secret 和 token 并为您签名所有内容。与 aws-sdk 相同。您可以使用这三个项目初始化凭据,它会自动使用这些临时凭据为您签署所有请求。如果您想直接手动使用 window.fetch、request、curl(在此处插入 http 客户端)手动访问您的 API,您可以calculate your own Sig4(注意它可能有点复杂或use a modern library to do it for you。
另外记录一下,在进行研究时,我注意到如果您不想使用 AWS_IAM 作为 APIG 授权者,并且您想使用“Cognito Identity Pool Authorizer”,这是 APIG 下拉列表中的一个新选项如果您只是将JWT gained from a successful Cognito popl auth 作为授权标头传递给 APIG,仍然可以在 lambda 事件中获得大量有关用户的信息。在 JWT 内部有很多属性,您可以在池设置中自定义这些属性。
IMO 专业意见我认为使用 AWS_IAM 临时信用授权器是首选。这样,您可以在 Cognito 身份(Facebook、Twitter、池等)中使用任意数量的不同 IdP