0

一般来说,我对 OpenID 和身份验证非常陌生。我的问题如下:我们的应用程序在 apache 2.x 服务器(即我们的 RP)上提供服务,前端从静态目录提供服务,如果代理在后端/api,则 OP 是一个 keycloak 实例。总的来说,我们设法让它工作,但我们正在努力注销。/redirect_uri?logout=<base-app-uri>注销是通过在(当然使用 url 编码)发出 GET 请求来触发的。尽管我们的<base-app-uri>受保护,我们希望在注销时显示默认登录页面。当访问上述 uri 时,后端 API 成功开始回答 401 并且会话在 Keycloak 控制台中消失,但 RP 不会将用户重定向到登录页面并继续提供受保护的静态内容。事实上,只有当我删除mod_auth_openidc_sessioncookie 时才会实现重定向。

4

1 回答 1

0

我会说这是错误的身份验证设计。前端是 SPA 应用程序,静态内容不应受mod_auth_openidc. 它应该被列入白名单。前端将管理自己的身份验证,Authorization Code Flow + PKCE flow并将访问令牌附加到每个 API 请求。SPA(或使用的 SPA 库)处理注销 = 它删除本地应用程序会话 cookie,并且还执行 OIDC 注销(重定向到使用的身份提供者)。

API 部分得到正确保护。

恕我直言,还注销并重定向到登录页面(我猜在这种情况下是 Keycloak 登录表单)不是一个好的用户体验。最好在前端有一个特殊的白名单路由,例如/bye,您可以在其中通知注销已成功。

于 2021-06-21T20:33:40.480 回答