Cognito 自定义身份验证触发器未从 Cognito 获取会话
Cognito Custom Auth trigger not getting Session from Cognito
我尝试从 AWS CLI 调用 InitiateAuth
API。我已经正确设置了 Define auth、create auth 和 verify auth lambda 触发器。问题是,当我 运行 下面的命令时,它显示错误:
aws cognito-idp initiate-auth --client-id <my_client_id> --auth-flow CUSTOM_AUTH --auth-parameters USERNAME=uname,ChallengeName="SRP_A",SRP_A="<srp_value>"
错误:An error occurred (UserLambdaValidationException) when calling the InitiateAuth operation: DefineAuthChallenge failed with error Cannot read property 'challengeName' of undefined.
我查看了 Define Auth lambda 代码,以及 Lambda 执行的 Cloud Watch 日志。发生错误是因为来自 Cognito 的输入在事件 json 中包含一个空的 session
键(通常从 Cognito 发送到 Lambda)。由于 属性 challengeName
位于 session
键内(如官方文档所示)。
这是当我 运行 命令时从 Cognito 发送到 Lambda 的 JSON 事件(我从 CloudWatch Lambda 日志中得到这个 JSON,我打印了 event
这是从 Cognito 发送的):
{
version: '1',
region: 'us-east-1',
userPoolId: 'us-east-1_******',
userName: 'uname',
callerContext: {
awsSdkVersion: 'aws-sdk-unknown-unknown',
clientId: '<my_client_id>'
},
triggerSource: 'DefineAuthChallenge_Authentication',
request: {
userAttributes: {
sub: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx',
'cognito:email_alias': '<email>',
'cognito:user_status': 'CONFIRMED',
email_verified: 'true',
name: 'Custom Test',
email: '<email>'
},
session: [], -----> !! Empty
userNotFound: false
},
response: { challengeName: null, issueTokens: null, failAuthentication: null }
}
这是什么原因?是不是因为我从 CLI 发送请求,所以 Cognito 无法创建会话之类的?我不确定。任何帮助将不胜感激。
会话保存以前的身份验证挑战结果(来自内置挑战或您自定义的挑战)。第一次调用 define auth challenge lambda 时它将为空。顾名思义,您必须在处理程序响应中定义身份验证质询。
我尝试从 AWS CLI 调用 InitiateAuth
API。我已经正确设置了 Define auth、create auth 和 verify auth lambda 触发器。问题是,当我 运行 下面的命令时,它显示错误:
aws cognito-idp initiate-auth --client-id <my_client_id> --auth-flow CUSTOM_AUTH --auth-parameters USERNAME=uname,ChallengeName="SRP_A",SRP_A="<srp_value>"
错误:An error occurred (UserLambdaValidationException) when calling the InitiateAuth operation: DefineAuthChallenge failed with error Cannot read property 'challengeName' of undefined.
我查看了 Define Auth lambda 代码,以及 Lambda 执行的 Cloud Watch 日志。发生错误是因为来自 Cognito 的输入在事件 json 中包含一个空的 session
键(通常从 Cognito 发送到 Lambda)。由于 属性 challengeName
位于 session
键内(如官方文档所示)。
这是当我 运行 命令时从 Cognito 发送到 Lambda 的 JSON 事件(我从 CloudWatch Lambda 日志中得到这个 JSON,我打印了 event
这是从 Cognito 发送的):
{
version: '1',
region: 'us-east-1',
userPoolId: 'us-east-1_******',
userName: 'uname',
callerContext: {
awsSdkVersion: 'aws-sdk-unknown-unknown',
clientId: '<my_client_id>'
},
triggerSource: 'DefineAuthChallenge_Authentication',
request: {
userAttributes: {
sub: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx',
'cognito:email_alias': '<email>',
'cognito:user_status': 'CONFIRMED',
email_verified: 'true',
name: 'Custom Test',
email: '<email>'
},
session: [], -----> !! Empty
userNotFound: false
},
response: { challengeName: null, issueTokens: null, failAuthentication: null }
}
这是什么原因?是不是因为我从 CLI 发送请求,所以 Cognito 无法创建会话之类的?我不确定。任何帮助将不胜感激。
会话保存以前的身份验证挑战结果(来自内置挑战或您自定义的挑战)。第一次调用 define auth challenge lambda 时它将为空。顾名思义,您必须在处理程序响应中定义身份验证质询。