如何用钥匙斗篷保护angular/spring应用程序



我有一个弹簧引导(后端(&angular(前端(应用程序,我想用密钥斗篷(用于身份验证(来保护它。

我有一个非常基本的部署,其中spring创建的可执行jar也提供客户端代码(来自angular(。

我看过几篇教程,其中前面和后面是分开的,前面使用代码流+pkce将其身份验证委托给keycloft,而后面是无状态的,并检查是否存在由keycloft实例验证的jwt令牌。

然而,由于我有一个后端服务器,我希望避免使用公共客户端,而是依赖于服务器端的后台通道令牌交换。所以前面不应该有任何关于钥匙斗篷实例的知识。

这可能吗/这是最佳做法吗?有没有一个前置库可以帮助我实现这一点?我遇到过库keycloft angular,但它似乎指向第一种情况,即SPA直接连接到Keycloft,而不是使用后端服务器。

在这种情况下,您不需要前端库。在前端,您应该只处理用户会话(有一个会话cookie(,并每次将cookie发送到后端。然后,后端服务器应该使用任何oauth客户端与密钥斗篷服务器通信,一旦获得令牌,它就可以将它们与会话的句柄一起保存在数据库中。

以下是这个流程的样子:

  1. 请求客户端->后端服务器->用302回复密钥斗篷授权端点。注册的redirect_uri应该是后端服务器公开的uri
  2. 用户执行认证/同意等
  3. Keycloft用代码重定向到redirect_uri
  4. 后端接收代码(当它侦听重定向uri地址时(,并与Keycloft交换代码
  5. 后端接收访问令牌,并将其与会话ID一起保存在数据库中
  6. 当客户端通过会话向后端发出另一个请求时,后端会从DB中选择一个访问令牌,并可以调用API

最新更新