【问题标题】:how to both security web browser request and Restful request in spring security with keycloak如何使用 keycloak 在 Spring Security 中同时保护 Web 浏览器请求和 Restful 请求
【发布时间】:2018-05-08 09:51:20
【问题描述】:

我正在使用带有 keycloak 的 spring boot security 来保护我的应用程序。但我既有普通的网络浏览器请求(使用 thymeleaf 模板),也有休息 api 请求(没有浏览器和 Controller 中的方法,用 @ResponseBody 和 json 格式注释)。

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

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

谢谢!

【问题讨论】:

    标签: spring-boot spring-security keycloak


    【解决方案1】:

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

    • Public:允许身份验证,没有客户端密码。
    • 机密:允许使用客户端机密进行身份验证。
    • 仅承载者:您需要拥有访问令牌才能访问其资源。

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

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

    【讨论】:

    • 嗨@xtreme,如何为keycloak公共客户端发出非浏览器请求,我应该设置哪个http get请求标头。我只知道如果使用仅承载客户端,我可以使用带有有效访问令牌的“Authetication”标头,但我应该为公共客户端类型做什么。谢谢!
    • 对于第二种解决方案,是的,它确实有效。但由于我的应用程序只是一个简单的服务(为那些非休息用户提供简单的 UI),如果可以的话,我不想拆分它。
    • 从您的第一条评论开始,您也可以将Authorization 标头用于公共和机密客户。
    猜你喜欢
    • 2022-08-03
    • 2019-06-05
    • 2013-06-25
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    • 2015-02-20
    • 2011-12-11
    • 2013-08-08
    相关资源
    最近更新 更多