如何使用 keycloak 保护 angular/spring 应用程序?
Posted
技术标签:
【中文标题】如何使用 keycloak 保护 angular/spring 应用程序?【英文标题】:How to secure angular/spring app with keycloak? 【发布时间】:2021-06-25 02:47:24 【问题描述】:我有一个 spring boot(后端)和 angular(前端)应用程序,我想用 keycloak 保护它(用于身份验证)。
我有一个非常基本的部署,其中由 spring 创建的可执行 jar 也为客户端代码提供服务(来自 angular)。
我看过几个教程,前面和后面是分开的,前面使用代码流+pkce将其认证委托给keycloak,而后面是无状态的,检查是否存在keycloak实例认证的jwt令牌.
但是,由于我有一个后端服务器,我想避免使用公共客户端,而是依赖服务器端的反向通道令牌交换。所以前面应该没有keycloak实例的任何知识。
这可能吗/这是最佳实践吗?是否有一个前端库可以帮助我实现这一目标?我遇到了库 keycloak-angular,但它似乎是针对第一种情况,即 SPA 直接连接到 Keycloak 而不是使用后端服务器。
【问题讨论】:
【参考方案1】:在这种情况下,您不需要前端库。在您的前端,您应该只处理用户会话(有一个会话 cookie)并每次将 cookie 发送到您的后端。然后后端服务器应该使用任何 oauth 客户端与您的 keycloak 服务器进行通信,一旦获得令牌,它就可以将它们与会话句柄一起保存在数据库中。
此流程可能如下所示:
-
请求客户端 -> 后端服务器 -> 向 keycloak 授权端点回复 302。注册的redirect_uri应该是后端服务器暴露的uri
用户执行身份验证/同意等。
Keycloak 使用代码重定向到 redirect_uri
后端接收代码(因为它监听重定向 uri 地址),并与 Keycloak 交换它。
后端接收访问令牌并将其与会话 ID 一起保存在数据库中。
当客户端通过其会话向后端发出另一个请求时,后端会从数据库中选择一个访问令牌并可以调用 API。
【讨论】:
以上是关于如何使用 keycloak 保护 angular/spring 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 keyCloak 保护 Angular(accessType-Public)和 Nodejs 应用程序(accesType-bearer-only)
Angular - Spring Boot - Keycloak - 401错误
带有 Keycloak 的 Angular/Spring Boot 抛出 403
Keycloak Angular 2 - 检查身份验证状态 Keycloak 对象