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

Cognito - Client is not enabled for OAuth2.0 flows

我已经在 this tutorial 之后成功设置了在 Localhost 上运行的 AWS Cognito 环境。

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

编辑:

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

我想了解我应该在 AWS Cognito 配置或服务器配置设置中查看的内容。服务器未使用负载平衡器。我认为问题可能出在反向代理或 HTTPS 设置中。

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

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

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

Resources:
  FooBarUserPoolClient:
    Type: AWS::Cognito::UserPoolClient
    Properties:
      AllowedOAuthFlowsUserPoolClient: True # Set here

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

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

所以我将以下内容放入回调 URL 并遇到了有问题的错误:

https://*AppLBTest*-123456123456.ap-southeast-1.elb.amazonaws.com/oauth2/idpresponse

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

https://*applbtest*-123456123456.ap-southeast-1.elb.amazonaws.com/oauth2/idpresponse

我知道 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
}

Here 是 link 用于创建用户池客户端的 terraform 文档。

here 是 AWS 文档的 link,它说您必须将属性 AllowedOAuthFlowsUserPoolClient 设置为 true。此属性映射到相同的 allowed_oauth_flows_user_pool_client = true 在 terraform 中。