首页 > 解决方案 > 无法执行 Keycloak 单次注销

问题描述

我有两个应用程序,比如说 App1 和 App2。App1 使用 mod_auth_openidc 进行保护,App2 托管在 wildfly 上并使用 keycloak 特定的 java 适配器进行保护。SSO 在这两个应用程序上都能正常工作。但是,在注销的情况下会出现问题。当我从 App1 执行注销时,两个应用程序都被重定向到下一个请求时登录(如预期的那样)。但是,当我在 App2 上执行注销时,App1 仍然正常工作,而不是在下一次请求时再次要求登录。

根据 keycloak 文档,应为特定客户端设置管理 URL,Keycloak 服务器可以使用该客户端向应用程序发送后端请求以执行各种任务,例如注销用户或推送撤销策略。

从 apache 日志中,我看不到 keycloak 针对 App2 执行的注销生成的任何后端请求。如果我从 keycloak 管理实用程序生成注销,则 apache 日志会显示 k_logout 的发布操作。

我想,我缺少一些配置,但不知道是什么?在这方面的任何想法/帮助将不胜感激。非常感谢。

更多详细信息:

App1 - 基于 Django 的 Web 应用程序。这是使用 Apache 托管并使用 mod_auth_openidc 保护的。下面给出了 apache 和 mod_auth_openidc 配置。

App2 - Spring MVC(Java)。这部署在 Wildfly 上,并使用 keyclaok 适配器进行保护(按照此处提到的过程)。

Keycloak 配置 - 两个应用程序都使用此处描述的设置在 keycloak 中进行配置。

Apache 和 mod_auth_openidc 配置为:

WSGIDaemonProcess myproject python-home=path_to_v_env  python-path=path_to_python
WSGIProcessGroup myproject
WSGIScriptAlias / path_to_wsgi.py

OIDCProviderMetadataURL http://keycloak_domain/auth/realms/demo/.well-known/openid-configuration
OIDCRedirectURI http://domain_name/testapp
OIDCCryptoPassphrase random4321
OIDCClientID testapp
OIDCClientSecret client_secret
OIDCDefaultLoggedOutURL http://domain_name/
OIDCScope "openid email profile"
<Location /testapp/>
     AuthType openid-connect
     Require valid-user
</Location>

使用的不同系统的版本有:

  1. mod_auth_openidc 2.3.7
  2. 阿帕奇 2.4.34
  3. Ubuntu 16.4
  4. 钥匙斗篷 4.2.1

标签: keycloakmod-auth-openidc

解决方案


推荐阅读