我不理解我的API网关和Cognito用户池授权器的以下行为。使用AWS SAM模板,我部署了以下Cognito用户池:
CognitoUserPoolClient:
Type: AWS::Cognito::UserPoolClient
Properties:
UserPoolId: !Ref CognitoUserPool
ClientName: !Sub CognitoUserPoolClient-${StageName}
GenerateSecret: false
SupportedIdentityProviders:
- COGNITO
ExplicitAuthFlows:
- ALLOW_USER_PASSWORD_AUTH
- ALLOW_CUSTOM_AUTH
- ALLOW_REFRESH_TOKEN_AUTH
- ALLOW_USER_SRP_AUTH
OptalXCognitoUserPool:
Type: AWS::Cognito::UserPool
Properties:
AutoVerifiedAttributes:
- email
EmailVerificationSubject: Verify your email.
EmailVerificationMessage: Please click the link below to verify your email address. {####}
EmailConfiguration:
EmailSendingAccount: DEVELOPER
From: Widgets Co <admin@widgets.com>
ReplyToEmailAddress: admin@widgets.com
SourceArn: !FindInMap [ StageMap, !Ref StageName, EmailSESArn ]
UserPoolName: !Sub CognitoUserPool-${StageName}
VerificationMessageTemplate:
DefaultEmailOption: CONFIRM_WITH_LINK
AdminCreateUserConfig:
AllowAdminCreateUserOnly: true
UnusedAccountValidityDays: 90
InviteMessageTemplate:
EmailMessage: ...
EmailSubject: Welcome to Widgets Co!
SMSMessage: Your username is {username} and temporary password is {####}.
Policies:
PasswordPolicy:
MinimumLength: 8
UsernameAttributes:
- email
Schema:
- AttributeDataType: String
Name: user_id
Mutable: false
DeveloperOnlyAttribute: false
- Name: email
Mutable: false
Required: true
然后,我定义了一个API网关,它使用Cognito用户池作为其授权者:
WidgetsAPI:
Type: 'AWS::Serverless::Api'
Name: WidgetsAPI
Properties:
GatewayResponses:
EXPIRED_TOKEN:
ResponseParameters:
Headers:
Fail-Reason: "'Expired token'"
Access-Control-Allow-Origin: "'*'"
DEFAULT_4xx:
ResponseParameters:
Headers:
Access-Control-Expose-Headers: "'WWW-Authenticate'"
Access-Control-Allow-Origin: "'*'"
DEFAULT_5XX:
ResponseParameters:
Headers:
Fail-Reason: "'Internal server error. Check logs.'"
Access-Control-Allow-Origin: "'*'"
Auth:
DefaultAuthorizer: CognitoAuthorizer
Authorizers:
CognitoAuthorizer:
UserPoolArn: !FindInMap [ StageMap, !Ref StageName, UserPoolArn ]
AddDefaultAuthorizerToCorsPreflight: false
这里,我的userpoolarn
在一个映射
中,该映射根据我们所处的环境(stage
或prod
)而有所不同。我定义了一堆endpoint,但为了演示起见,这里有一个叫做/users
的endpoint。
注意-关于这个主题有几篇文章(这里、这里和这里),但没有一篇文章描述我的问题,这就是为什么我的API网关在第一次应用Cloudformation堆栈时返回401 unauthorized
错误,并且只有在我从控制台手动部署整个API网关阶段之后才能正常工作。
向模板中添加AWS::Apigateway::Deployment
资源。
ApiGatewayDeployment:
DependsOn:
- Function1Name
- Thing2Name
Type: AWS::ApiGateway::Deployment
Properties:
RestApiId: !Ref WidgetsAPI
StageName: !Sub ApiGateway-${ApiGatewayStageName}
现在,SAM deploy
将使api部署到“apigateway-loremipsum”
我正在尝试使用aws api网关授权器和cognito用户池。当我使用aws api网关控制台进行测试时,它工作得很好。 但当我尝试在api中启用授权时,它显示请查看下面的屏幕截图 有人能帮忙吗。
我使用的是WebLogic10.3.5。当我在eclipse中本地部署Struts2应用程序时,它运行良好。当我试图通过管理控制台部署我的应用程序时,我得到了一个Struts 2错误,name not found for action。 当我看着这张照片的时候。war文件,它有所有的库和类。我按照以下说明通过管理控制台进行部署。我可以通过管理控制台成功地部署,但是当我尝试使用应用程序的测试链接时,
我正在尝试运行以下网络应用程序 http://www.metaboanalyst.ca/faces/home.xhtml 它说将.war文件复制并粘贴到webapps/localhost(Tomcat)或通过GUI管理控制台(Glassfish)部署war文件。 但是我不知道我必须做什么,有人能帮我运行吗?我已经安装了其他需要的东西。
我遵循的方法是,我为每组用户创建一个单独的Cognito用户池。 当用户登录时,他将通过适当的用户池进行身份验证。 为了调用后续的API,我计划使用Lambda Authorizer。 我遇到了下面的链接,以验证ID令牌。 https://github.com/awslabs/aws-support-tools/blob/master/cognito/decode-verify-jwt/decod
我创建了一些Lambda函数,并使用SAM进行了部署。部署是成功的,但当试图到达endpoint时,我总是获得 即使我使用头发送正确的承载令牌。然后,如果我去Authorizer并运行测试,它会很好地通过并在CloudWatch中生成日志,但是当我从前端应用程序或REST客户端应用程序运行到endpoint的请求时,我会得到未经授权的消息,并且检查CloudWatch,就不会执行Authorize
我是API网关的新手。我尝试使用“自定义授权程序”。我遵循了下面的文档,并使用了网站提供的示例代码。https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html “令牌类型的lambda授权者”是工作的。 但是... 我对“请求类型”感到困惑,不知道如何将quer