与 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。
当使用 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。