Cognito - 未为 OAuth2.0 流启用客户端

obj*_*y C 10 c# reverse-proxy http amazon-web-services amazon-cognito

我已经按照本教程成功设置了一个在 Localhost 上运行的 AWS Cognito 环境。

对于下一步,我将应用程序发布到我的外部 Web 服务器。我确认 Cognito 配置(即客户端 ID、元数据地址、区域等)是正确的。但是,当我访问并尝试登录新发布的公共站点时,我收到以下错误:“客户端未启用 OAuth2.0 流。”

 客户端未启用 OAuth2.0 流

编辑:

这是我的应用程序客户端设置

应用客户端设置

我需要有关我应该在 AWS Cognito 配置或服务器配置设置中查看的内容的帮助。服务器没有使用负载平衡器。我相信问题可能出在反向代理或 HTTPS 设置中。

hak*_*shi 32

当您使用 Cloudformation 或 AWS SAM 设置 Cognito,并且忘记将AllowedOAuthFlowsUserPoolClient属性启用为 true 时,也会发生这种情况。

Resources:
  FooBarUserPoolClient:
    Type: AWS::Cognito::UserPoolClient
    Properties:
      AllowedOAuthFlowsUserPoolClient: True # Set here
Run Code Online (Sandbox Code Playgroud)


cal*_*llo 25

我以前见过这个问题。向 Cognito 发出请求时,请仔细查看您指定的重定向 URL/回调 URL。如果我没记错的话,根据您在应用程序客户端设置中指定的内容,如果重定向 URL 中有尾随的“/”或缺少“/”,我已经看到了这个问题。


小智 16

我了解 OP 并未要求使用 terraform 来解决此问题,但它可能会对将来使用terraform创建 cognito 用户池客户端的人有所帮助。如果您像我一样在使用 terraform 时遇到此问题,请确保设置allowed_oauth_flows_user_pool_client为 true。例如,像这样:

resource "aws_cognito_user_pool_client" "client" {
  name = "<your user pool client name>"
...
  allowed_oauth_flows_user_pool_client = true
}
Run Code Online (Sandbox Code Playgroud)

是用于创建用户池客户端的 terraform 文档的链接。

AWS 文档的链接,其中指出您必须将该属性设置AllowedOAuthFlowsUserPoolClient为 true。此属性映射到 terraform 中的相同属性 allowed_oauth_flows_user_pool_client = true


小智 13

TLDR:除了之前的答案之外,请确保您的回调 URL 为小写。

长答案:我遇到了同样的错误。就我而言,我从负载均衡器页面的描述窗口复制了应用程序负载均衡器的 DNS 名称,其中有不同的大小写

所以我将以下内容放入回调 URL 中并遇到了相关错误:

https://*AppLBTest*-123456123456.ap-southeast-1.elb.amazonaws.com/oauth2/idpresponse
Run Code Online (Sandbox Code Playgroud)

将回调 URL 更改为以下内容后,身份验证按预期工作:

https://*applbtest*-123456123456.ap-southeast-1.elb.amazonaws.com/oauth2/idpresponse
Run Code Online (Sandbox Code Playgroud)

  • 这是荒唐的。但它解决了我的问题。谢谢! (7认同)

obj*_*y C -1

此问题不是认知问题,而是 IIS 和 HTTPs 问题。如果您计划使用此 AWS 服务,请确保您的服务器完全采用 HTTPS。如有任何问题请发表评论。