从 Cognito 的托管 UI 登录时,收到 401 错误

0

【以下的问题经过翻译处理】 谢谢你的帮助。

如果您知道以下事件,请告诉我,我将不胜感激。

【问题】

在Cognito 和 ALB 集成环境下,为什么我从 Cognito 托管 的UI 登录时,会收到 401 Authorization Required 错误?

【具体情况】

我们已经按照以下博客中的过程验证了 Cognito 和 ALB 之间的集成。 [1]

[1] 在 EC2 ,ALB和开发者集成的内容交付环境中,添加了 Cognito 身份验证。

https://dev.classmethod.jp/articles/cognito-alb-secret/

程序本身运行是正常的,但有个个人担忧。

也就是说,如果我从 Cognito 的托管 UI 登录而不是访问 ALB 的域名,会有什么行为?

实际上,我在 Cognito 中创建了一个用户,并从 Cognito 控制台点击了“查看托管 UI”按钮。

出现登录页面,所以我以 Cognito 用户身份登录并更改了密码。

但是,密码更改后出现的屏幕仅显示 401 Authorization Required。

之后,我尝试直接访问ALB域名,能够正确显示ALB后面的EC2运行的页面。因此确认在访问ALB 域中时,不会发生这种情况,而只会在从 Cognito 托管 UI 访问时发生。

[关于附件]

・401 授权请求截屏

在此处输入图片描述

・用于Cognito 托管 UI 页面的按钮

在此处输入图片描述

・允许的回调 URL 在此处输入图片描述

如能对上述问题给予指导,我们将不胜感激。

profile picture
专家
已提问 5 个月前41 查看次数
1 回答
0

【以下的回答经过翻译处理】 根据以下文档 [1],在对网站进行身份验证时的身份验证流程中,Application Load Balancer 期望用户首先访问负载均衡器。 ALB 身份验证通过在侦听器规则中定义身份验证操作。 将检查传入请求中是否存在会话 cookie,然后检查它是否有效。如果会话 cookie 已设置且有效,则 ALB 会将设置X-AMZN-OIDC-* 的标头,然后将请求路由到目标组。请求标头中包含 JSON Web 令牌 (JWT) 格式的身份信息,后端可以使用该格式来识别用户。如果请求会话中cookie 未设置或无效,则 ALB 将遵循 OIDC 协议并向身份提供者发出 HTTP 302 重定向。此时将遵循身份验证流程,会话 cookie 将会更新为新的身份验证信息。

您还可以查看以下博客文章 [2],以更详细地了解 Application Load Balancer 身份验证的工作原理。

回答您的问题“也就是说,如果我采用 Cognito 的托管 UI 登录而不是访问 ALB 的域名,会怎么样?”,因为客户端最初没有尝试访问您的网站,负载均衡器不知道客户端正试图访问负载均衡器的后端,请求被视为非预期请求。负载均衡器“oauth2/idpresponse”端点的存在是为了处理与 Cognito 令牌端点的授权代码交换,并在 完成Cognito 和负载均衡器之间的通信后,向客户端返回转发的原始 URI。

[1] 使用 Application Load Balancer 对用户进行身份验证 - 身份验证流程 - https://docs.aws.amazon.com/elasticloadbalancing/latest/application/listener-authenticate-users.html#authentication-flow

[2] 使用 Application Load Balancer 内置身份验证简化登录 - https://aws.amazon.com/blogs/aws/built-in-authentication-in-alb/

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则