放大 Auth.signIn() ClientMetadata 未发送到 Lambda 触发器
Amplify Auth.signIn() ClientMetadata not sent to Lambda Trigger
我们正在将我们的身份验证转移到 Cognito,并且需要更改我们从 Cognito 获得的令牌。我们正在使用 Pre Token Generation Lambda 触发器来完成此操作。我们还使用 Amplify 的 Auth 库。但是,我无法访问我们使用 Auth.signIn()
.
发送的 clientMetadata
在前端我们有:
const user = await Auth.signIn(username, password, { metadataKey: metadataValue });
看来请求已正确发送,因为在网络选项卡上的请求负载中我们有:
{
AuthFlow: ...,
AuthParameters: ...,
ClientId: ...,
ClientMetadata: { metadataKey: metadataValue }
}
在 lambda 函数中,我只是将事件记录到控制台:
exports.handler = async (event, context, callback) => {
console.log('Event:', event)
callback(null, event)
}
在 AWS Cloundwatch 日志中,每次我们从应用程序登录时都会记录事件(因此一切似乎都已正确设置),但事件不包括 clientMetadata
属性 作为 event.request
.
的一部分
所以最终,一切正常,没有错误或类似的事情,我们从 Cognito 取回了我们的令牌,但是在 Lambda 函数中找不到 clientMetadata,阻止我们在 Lambda 中执行必要的逻辑功能来调整我们的代币。
链接:
- 从 signIn Amplify Docs 看来我们正确地调用了它。
- 从 Pre Token Generation Lambda Trigger Docs 看来,clientMetadata 属性 应该存在于
event.request.clientMetadata
。
- 这是一个 related Whosebug question,但要么我做错了什么,要么 AWS 改变了这个,因为提出问题的人能够使用我用来发送的相同语法从 Lambda 访问 clientMetadata它在登录时。
如有任何帮助,我们将不胜感激。
更新:
这似乎是因为我们正在使用身份验证流程“USER_PASSWORD_AUTH”。这个流程是顺利的用户迁移所必需的,这就是我们使用它的原因,但它似乎忽略了我们发送的 clientMetadata。
尝试在执行 Auth.signIn
之前使用 Auth.configure
设置元数据值。一方面,登录事件看起来不像是令牌前 lambda 触发器,这解释了为什么未传递元数据。我很欣赏这不是特别直观。也就是说,另一方面,假设在作为刷新的一部分生成令牌时您将需要访问相同的元数据值,那么您可能无论如何都需要涵盖其他非初始登录事件。使用 Auth.configure
看起来对两者都有好处。
使用“USER_PASSWORD_AUTH”流时,请求中省略了 clientMetadata(不确定这是错误还是预期行为)。改回“USER_SRP_AUTH”解决了这个问题,客户端元数据按预期出现在请求中。
我们正在将我们的身份验证转移到 Cognito,并且需要更改我们从 Cognito 获得的令牌。我们正在使用 Pre Token Generation Lambda 触发器来完成此操作。我们还使用 Amplify 的 Auth 库。但是,我无法访问我们使用 Auth.signIn()
.
在前端我们有:
const user = await Auth.signIn(username, password, { metadataKey: metadataValue });
看来请求已正确发送,因为在网络选项卡上的请求负载中我们有:
{
AuthFlow: ...,
AuthParameters: ...,
ClientId: ...,
ClientMetadata: { metadataKey: metadataValue }
}
在 lambda 函数中,我只是将事件记录到控制台:
exports.handler = async (event, context, callback) => {
console.log('Event:', event)
callback(null, event)
}
在 AWS Cloundwatch 日志中,每次我们从应用程序登录时都会记录事件(因此一切似乎都已正确设置),但事件不包括 clientMetadata
属性 作为 event.request
.
所以最终,一切正常,没有错误或类似的事情,我们从 Cognito 取回了我们的令牌,但是在 Lambda 函数中找不到 clientMetadata,阻止我们在 Lambda 中执行必要的逻辑功能来调整我们的代币。
链接:
- 从 signIn Amplify Docs 看来我们正确地调用了它。
- 从 Pre Token Generation Lambda Trigger Docs 看来,clientMetadata 属性 应该存在于
event.request.clientMetadata
。 - 这是一个 related Whosebug question,但要么我做错了什么,要么 AWS 改变了这个,因为提出问题的人能够使用我用来发送的相同语法从 Lambda 访问 clientMetadata它在登录时。
如有任何帮助,我们将不胜感激。
更新:
这似乎是因为我们正在使用身份验证流程“USER_PASSWORD_AUTH”。这个流程是顺利的用户迁移所必需的,这就是我们使用它的原因,但它似乎忽略了我们发送的 clientMetadata。
尝试在执行 Auth.signIn
之前使用 Auth.configure
设置元数据值。一方面,登录事件看起来不像是令牌前 lambda 触发器,这解释了为什么未传递元数据。我很欣赏这不是特别直观。也就是说,另一方面,假设在作为刷新的一部分生成令牌时您将需要访问相同的元数据值,那么您可能无论如何都需要涵盖其他非初始登录事件。使用 Auth.configure
看起来对两者都有好处。
使用“USER_PASSWORD_AUTH”流时,请求中省略了 clientMetadata(不确定这是错误还是预期行为)。改回“USER_SRP_AUTH”解决了这个问题,客户端元数据按预期出现在请求中。