当在PostMan中测试我的TOKEN端点时,我得到错误HTTP 400 -“invalid_grant”。
在PostMan中,我配置了Authorization头(w/BasicclientId:secret)和头Content_Type。在URL编码的形式中,我设置了grant_type = client_credentials。所有这些设置都在此处的说明中得到确认:https://docs.aws.amazon.com/cognito/latest/developerguide/token-endpoint.html
手动检查后,我的CloudFormation模板正确部署了所有设置。
如果我进入Cognito设置,从导航中选择App Clients,然后“保存app clients changes”而不做任何更改,我不再在PostMan中得到相同的错误,我可以从中检索有效的访问代码。这几乎是因为更改在AWS中不“活动”,除非我出于任何原因重新保存在AWS控制台中。
是不是有些东西没有在AWS后端完全提交,除非我在控制台中手动点击保存?
**同样,这个模板,设置和PostMan测试确实有效,但只有在我进入Cognito并进行编辑,保存,撤销我的编辑并再次保存之后。
这是我的CF模板
AWSTemplateFormatVersion: "2010-09-09"
Transform: AWS::Serverless-2016-10-31
Description: Integration for webSvc1 and webSvc2
Parameters:
StageName:
...
Globals:
Function:
Timeout: 20
Api:
OpenApiVersion: 3.0.1
Resources:
UserPool:
Type: 'AWS::Cognito::UserPool'
Properties:
UserPoolName: !Sub ${CognitoUserPoolName}-${EnvironmentName}
UserPoolResourceServer:
Type: 'AWS::Cognito::UserPoolResourceServer'
DependsOn:
- UserPool
Properties:
Identifier: !Sub ${CognitoUserPoolName}-${EnvironmentName}
Name: api-resource-server
Scopes:
- ScopeName: "api.read"
ScopeDescription: "Read access"
UserPoolId: !Ref UserPool
UserPoolDomain:
Type: AWS::Cognito::UserPoolDomain
DependsOn:
- UserPool
- UserPoolResourceServer
Properties:
UserPoolId: !Ref UserPool
Domain: !Sub id-${EnvironmentName}
# Creates a User Pool Client to be used by the identity pool
UserPoolClient:
Type: 'AWS::Cognito::UserPoolClient'
DependsOn:
- UserPool
- UserPoolResourceServer
Properties:
ClientName: !Sub ${CognitoUserPoolName}-client-${EnvironmentName}
GenerateSecret: true
UserPoolId: !Ref UserPool
SupportedIdentityProviders:
- COGNITO
AllowedOAuthFlows:
- client_credentials
AllowedOAuthScopes:
- !Sub ${CognitoUserPoolName}-${EnvironmentName}/api.read
1条答案
按热度按时间332nm8kg1#
我迟到了,但我希望这对其他人有帮助。
我也面临着同样的问题。
根据AWS支持,您需要启用
AllowedOAuthFlowsUserPoolClient
设置,即从UI设置为true
,从API设置为false
。成功了!