Kubernetes - oauth2-proxy - Keycloak OIDC - OAuth2CodeParser 错误 - CODE_TO_TOKEN_ERROR 代码已用于 userSession 和客户端

问题描述 投票:0回答:1

我在 Kubernetes (OpenShift) 上安装了一个使用 OAuth 身份验证的应用程序(应用程序 A)。 身份验证在服务器端完成 - 后端应用程序使用领域 [realm01] 中的特定 client_id_A 和 client_secret_A 与 KeyCloak 实例 (KeyCloak-01) 进行握手。

在同一个 Kubernetes 集群命名空间中,我安装了另一个应用程序(应用程序 B),在其中使用来自同一领域 [realm01] 的特定 client_id_B 和 client_secret_B 使用 [keycloak-oidc] 提供程序设置对 [oauth2-proxy] 反向代理进行身份验证] 相同的 KeyCloak 实例 (KeyCloak-01)。

两个应用程序都将身份验证配置为“基于 cookie”而不是“基于 JWT 令牌”。

期望的行为是单点登录:一旦在一个应用程序中经过身份验证,就会在另一个应用程序中自动进行身份验证 - 因为两个应用程序都使用来自同一 KeyCloak 领域实例的 client_id。

如果在不同的浏览器实例中打开两个应用程序的身份验证流程,它们都可以正常工作。 如果两个应用程序在同一浏览器实例(不同选项卡)中打开,则行为不是所需的行为。

如果先打开应用A,则user_01认证成功。如果同一用户 [user-01] 尝试在同一浏览器实例中访问应用程序 B,则会由于从 [oauth2-proxy/auth] 服务端点收到 400 状态代码而发出 500 入口错误代码。

如果先打开应用程序B(在oauth2-proxy反向代理下),则user_01认证成功。如果同一用户 [user-01] 尝试在同一浏览器实例中访问应用程序 A,他将被重定向到可以成功登录的登录页面。但从那一刻起,应用程序 B 不再工作 – 与上面相同的错误 – 由于从 [oauth2-proxy/auth] 服务端点收到 400 状态代码而发出 500 入口错误代码。

来自 oauth2-proxy 容器日志的错误:

169.254.169.5 - - [17/Apr/2024:10:40:41 +0000] "GET /[oauth-app-name]/auth HTTP/1.1" 400 628 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36" 1117 0.001 [] [] - - - - 1dd96bfdb357d7d1292553dc7a8ad520
2024/04/17 10:40:41 [error] 2617#2617: *14681947 auth request unexpected status: 400 while sending to client, client: 100.64.0.3, server: some-host.com, request: "GET /[app-name-base-path]/[route-value] / HTTP/2.0", host: "some-host.com"

来自 KeyCloak 容器日志的错误:

12:45:55,616 WARN  [org.keycloak.protocol.oidc.utils.OAuth2CodeParser] (default task-133) Code '[code-guid]' already used for userSession '[user-session-guid]' and client '[client-guid]'.
12:45:55,616 WARN  [org.keycloak.events] (default task-133) type=CODE_TO_TOKEN_ERROR, realmId= realm01, clientId= client_id_B, userId=null, ipAddress=10.128.3.124, error=invalid_code, grant_type=authorization_code, code_id=[user-session-guid], client_auth_method=client-secret

当应用程序 A 将用户重定向到 KeyCloak 登录页面时,查询参数如下所示:

client_id= client_id_A
redirect_uri=…./ signin-oidc
response_type=code
scope= openid profile
code_challenge=….sfgreggr….
code_challenge_method= S256
response_mode= form_post
nonce=…dfsdf…
acr_values = some_guid
ui_locales= en-us
state=….dfgdrg…
x-client-SKU=some-value
x-client-ver=some-version

当应用程序 B 将用户重定向到 KeyCloak 登录页面时,查询参数如下所示:

client_id= client_id_B
redirect_uri=…./ signin-oidc
response_type=code
scope= openid+email+profile
state=….xxxxvvdrg…

请指导我确定以下问题的解决方案:

  1. 如何启用 auth2-proxy 容器(用于应用程序 B)的调试详细日志记录,以便从 /auth 端点错误获取详细信息? 我尝试了不同的环境变量值,但 auth2-proxy 容器日志不包含有关针对 KeyCloak 实例执行的调用的响应详细信息
  2. auth2-proxy 容器(用于应用程序 B)的哪些设置是错误/不匹配的? 我认为问题在于应用程序 A 和 B 的身份验证设置未“对齐”。
kubernetes keycloak openshift openid-connect oauth2-proxy
1个回答
0
投票

你能做到吗?我也面临同样的问题

© www.soinside.com 2019 - 2024. All rights reserved.