与 Keycloak OIDC 集成的 Gitlab 注销失败

Sign out fails for Gitlab integrated with Keycloak OIDC

当使用 oauth2 提供者 keycloak 登录到 gitlab 并尝试注销时,Gitlab 重定向到 sign_in 页面,但不会结束 Keycloak 上的会话,因此我们再次登录。

这些是gitlab kubernetes部署中使用的环境变量:

- name: OAUTH2_GENERIC_APP_ID
  value: <client-name>
- name: OAUTH2_GENERIC_APP_SECRET
  value: "<client-secret>"
- name: OAUTH2_GENERIC_CLIENT_AUTHORIZE_URL
  value: "https://<keycloak-url>/auth/realms/<realm-name>/protocol/openid-connect/auth"
- name: OAUTH2_GENERIC_CLIENT_END_SESSION_ENDPOINT
  value: "https://<keycloak-url>/auth/realms/<realm-name>/protocol/openid-connect/logout"
- name: OAUTH2_GENERIC_CLIENT_SITE
  value: "https://<keycloak-url>/auth/realms/<realm-name>"
- name: OAUTH2_GENERIC_CLIENT_TOKEN_URL
  value: "https://<keycloak-url>/auth/realms/<realm-name>/protocol/openid-connect/token"
- name: OAUTH2_GENERIC_CLIENT_USER_INFO_URL
  value: "https://<keycloak-url>/auth/realms/<realm-name>/protocol/openid-connect/userinfo"
- name: OAUTH2_GENERIC_ID_PATH
  value: sub
- name: OAUTH2_GENERIC_NAME
  value: Keycloak
- name: OAUTH2_GENERIC_USER_EMAIL
  value: email
- name: OAUTH2_GENERIC_USER_NAME
  value: preferred_username
- name: OAUTH2_GENERIC_USER_UID
  value: sub

- name: OAUTH_ALLOW_SSO
  value: Keycloak
- name: OAUTH_AUTO_LINK_LDAP_USER
  value: "false"
- name: OAUTH_AUTO_LINK_SAML_USER
  value: "false"
- name: OAUTH_AUTO_SIGN_IN_WITH_PROVIDER
  value: Keycloak
- name: OAUTH_BLOCK_AUTO_CREATED_USERS
  value: "false"
- name: OAUTH_ENABLED
  value: "true"
- name: OAUTH_EXTERNAL_PROVIDERS
  value: Keycloak

我尝试了此处提到的解决方法:https://gitlab.com/gitlab-org/gitlab/-/issues/31203,但没有成功。请帮忙。

注:

Gitlab version: 14.9.2
Keycloak version: 17
Kubernetes Version: 1.21.5

非常清楚:期望您应该退出 GitLabn,不一定是完全退出 keycloak。这是正确发生的,因为您在注销后看到 sign-in 页面。例如,如果您使用 Google 登录 GitLab 并退出 GitLab,则您应该只退出 GitLab,而不是 Google。

您观察到的行为是由于您有 auto-login (auto_sign_in_with_provider) enabled,它会自动将用户从 sign-in 页面重定向到立即再次使用 keycloak(再次)登录在(成功)注销之后。

为了避免这个问题,在 GitLab 设置中(在 Admin -> Settings -> General -> Sign-in Restrictions 下)设置 After sign-out path/users/sign_in?auto_sign_in=false 或换句话说 https://gitlab.example.com/users/sign_in?auto_sign_in=false
请注意,查询字符串 ?auto_sign_in=false 将阻止 auto-redirect 重新登录到 keycloak。您也可以选择完全不同的 URL。

有关详细信息,请参阅 sign-in information and sign in with provider automatically