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

Posted

技术标签:

【中文标题】Cognito - 没有为 OAuth2.0 流启用客户端【英文标题】:Cognito - Client is not enabled for OAuth2.0 flows 【发布时间】:2020-05-29 06:05:58 【问题描述】:

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

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

编辑:

这是我的应用客户端设置

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

【问题讨论】:

您能否提供您的 AWS Cognito 应用程序客户端设置? 它完成了@JonE 我遇到了同样的问题,这是由于我在回调 url 上使用的大写字母。我只是使用所有小写来修复它。 【参考方案1】:

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

【讨论】:

对我来说就是这样,一个额外的“/”......谢谢! 我必须在我的应用客户端设置中的回调/注销 URL 中添加一个尾随“/”! 我还必须在回调 URL 中添加一个尾随“/”。这就是它所需要的。【参考方案2】:

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

长答案: 我遇到了同样的错误。就我而言,我从负载均衡器页面的描述窗口中复制了我的应用程序负载均衡器的 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

【讨论】:

这太荒谬了。然而它解决了我的问题。谢谢! 也解决了我的问题。如果您使用的是 ALB,请确保将 DNS 名称以小写形式作为回调 url!【参考方案3】:

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

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

【讨论】:

【参考方案4】:

我知道 OP 没有要求使用 terraform 来解决这个问题,但它可能会帮助将来使用 terraform 创建认知用户池客户端的人。如果您像我一样遇到此问题,请确保在使用 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 是用于创建用户池客户端的 terraform 文档的链接。

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

【讨论】:

【参考方案5】:

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

【讨论】:

以上是关于Cognito - 没有为 OAuth2.0 流启用客户端的主要内容,如果未能解决你的问题,请参考以下文章

没有 OIDC 的 OAuth2.0(普通 OAuth2.0)

没有密码的 AWS Cognito 用户池

为通过 guilds.join 范围、Discord OAuth2.0 添加到公会的用户赋予角色

在 CloudFormation 中将 Cognito 验证类型设置为链接

Oauth2.0详解及安全使用

OAuth 2.0。没有会议? (无国籍)