如何解决Cognito 用户池未调用 lambda 函数
我正在使用 Cloudformation 创建 Cognito 用户池,并将 LambdaConfig -> PreAuthentication 设置为同样使用 Cloudformation 创建的 Lambda 函数。问题是 Lambda 函数似乎没有被调用。进行身份验证时,用户在没有 PreAuthentication 逻辑干预的情况下登录,并且 lambda 函数的 Cloudwatch 日志为空。如果我在 Lambda 仪表板中测试该函数,它会正常运行。我没有收到任何错误。
此外,我正在一个可行的现有设置上对这个 Cloudformation 设置进行建模。 Cloudformation 堆栈产生的资源似乎与工作版本具有相同的配置。
cloudformation 模板的相关部分如下所示:
UserPool:
Type: AWS::Cognito::UserPool
Properties:
LambdaConfig:
PreAuthentication: !GetAtt UserAuthorizerFunction.Arn
UsernameAttributes:
- email
UsernameConfiguration:
CaseSensitive: false
Lambda 函数定义如下:
UserAuthorizerFunction:
Type: AWS::Lambda::Function
Properties:
FunctionName: Authorize_Users
Description: Authorizes users
Handler: index.handler
Role: !GetAtt AuthorizerFunctionRole.Arn
Code:
ZipFile: |
const AWS = require('aws-sdk')
// stuff
Runtime: nodejs12.x
lambda 函数是使用看起来正确的基于资源的策略创建的:
{
"Version": "2012-10-17","Id": "default","Statement": [
{
"Sid": "AuthorizerFunctionPermission-WSIGC4MBBT0C","Effect": "Allow","Principal": {
"Service": "cognito-idp.amazonaws.com"
},"Action": "lambda:InvokeFunction","Resource": "arn:aws:lambda:us-east-1:<redacted>:function:Authorize_Users","Condition": {
"ArnLike": {
"AWS:SourceArn": "arn:aws:cognito-idp:us-east-1:<redacted>:userpool/us-east-1_<redacted>"
}
}
}
]
}
为什么我的 PreAuthentication 钩子没有被执行?有没有我没有想到的 DependsOn
要求?
解决方法
事实证明这是一个已知问题 - 至少,其他人正在经历它: https://forums.aws.amazon.com/thread.jspa?messageID=897845󛌵
我需要删除 ALLOW_CUSTOM_AUTH
身份验证流程选项并使用 ALLOW_USER_PASSWORD_AUTH
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。