首页 > 解决方案 > 如何使用 keycloak 在 Spring Security 中同时保护 Web 浏览器请求和 Restful 请求

问题描述

我正在使用带有 keycloak 的 Spring Boot Security 来保护我的应用程序。但是我有正常的网络浏览器请求(使用 thymeleaf 模板)和休息 api 请求(没有浏览器和控制器中的方法,用 @ResponseBody 和 json 格式注释)。

从 web guider 中,我发现 keycloak 将使用不同的客户端类型进行浏览器请求(例如公共客户端)和无 UI 请求(仅承载),并且 SecurityConfig.java 中的会话不同,new RegisterSessionAuthenticationStrategy(new SessionRegistryImpl())并且new NullAuthenticatedSessionStrategy().

所以我的问题是如何在一个应用程序中配置spring security和keycloak以支持浏览器reqeust和rest api请求?

谢谢!

标签: spring-bootspring-securitykeycloak

解决方案


bearer-only只有当您有另一个客户端进行身份验证时,拥有一个客户端才有意义。简而言之,这些是 Keycloak 中的三种客户端类型:

  • 公共:允许身份验证,没有客户端密码。
  • 机密:允许使用客户端机密进行身份验证。
  • Bearer only:您需要拥有访问令牌才能访问其资源。

话虽如此,我认为仅将相同的应用程序公开和不记名都没有意义。通常,您为每个应用程序创建一个客户端。所以你有两个选择:

  • 将您的申请公开或保密。这将接受浏览器和非浏览器请求。推荐的。
  • 将您的应用程序一分为二,一个只为 UI(公共或机密)提供服务,另一个为 REST API 提供服务(这将是不记名的)。不过,请记住,您需要使用 UI 客户端登录来验证自己。仅当您的应用程序 API 大到可以从 UI 中拆分时才建议使用。

推荐阅读