我目前正在尝试让反向通道注销正常工作。通过 Keycloak 允许 SSO 的系统复杂且过时,并且需要自行管理用户。这就是为什么 Keycloak 只与登录相关 - 使访问令牌失效甚至在 Docker 中终止 Keycloak 都不会导致身份验证错误。
就我对反向通道注销的理解而言,它正是针对这个用例而设计的。 OAuth 2.0 规范是 OpenID Connect(又被 Keycloak 使用)的基础,其中反向通道注销定义如下:
https://openid.net/specs/openid-connect-backchannel-1_0.html
Keycloak 为每个客户端提供反向通道注销 URL 的输入。因此,我创建了一个 POST 端点并在 Keycloak 中提供了该端点的 URL,但没有任何反应。我被困在这里了。
如果您将 Keycloak 作为 Docker 容器运行,并且在本地主机上运行客户端应用程序,请确保使用
host.docker.internal
而不是 localhost
作为 Backchannel Logout URL
。其他 URL 可以保留为 localhost。
如果您的端点仍未被呼叫,请确保您的端点已正确配置为接受来自 Keycloak 的请求,而无需额外的身份验证或授权。
如果跨域访问您的端点,请确保正确配置 CORS(跨源资源共享)以允许来自 Keycloak 的请求。
对于 SpringBoot 应用程序,您可能还需要禁用 CSRF 保护:
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.csrf(AbstractHttpConfigurer::disable);
...
}