spring-security 使用keycloak会话的Sping Boot 安全性

ehxuflar  于 2022-11-11  发布在  Spring
关注(0)|答案(1)|浏览(285)

我是安全性的新手,我正在努力了解如何在不过度破坏的情况下实现适当的安全性。
以下是我的问题。
1.我不想让第三方客户端使用我的API,因此我不认为OAuth 2.0有任何重要性。因此,我希望在我的Sping Boot Security中使用keycloak(或Ory Kratos)生成的会话。关于如何做到这一点,有任何指导。
1.我遇到过一个应用程序https://opstra.definedge.com/,它的安全性是使用keycloak实现的(可以看到URL模式)。但是在请求中,当执行任何网络请求时,我在chrome DevTools Network标签中看不到任何JWT令牌。我认为他们正在以我想要的方式实现它。关于它是如何实现的任何概述。

7eumitmz

7eumitmz1#

我不是建筑师,但我很确定他们在Opstra中不使用Keycloak会话(他们必须在Keycloak servlet中运行Opstra)。看起来更像是他们使用OAuth2对来自Java客户端的用户进行身份验证,并且该客户端启用了自己的会话(opstra.definedge.comsso.definedge.com的JSESSIONID cookie).很有可能这个java客户端使用访问令牌来授权对资源服务器的请求,我们只是不能从浏览器中看到它。
限制允许使用您的API的客户端与授权方法关系不大:

  • 使用基本授权头,任何具有登录名和密码的客户端都可以访问
  • 通过Bearer授权头,任何具有有效令牌的客户端都可以访问(您已经预料到了)
  • 甚至JSESSIONID cookie也可以为任何来源设置(我相信),在这种情况下,来自同一浏览器的任何请求都将被授权,无论Web客户端是什么。

限制您的API客户端更多的是关于CORS配置,其目的就是:筛选哪些来源(主机+端口)可以访问哪些资源位置(URL)
Keycloak中有一个机密客户端的概念,其中客户端必须提供除client-id之外的密码,以交换访问令牌的授权代码,但这不适用于富客户端(在您不信任的设备上运行的客户端):Angular、Vue、React、原生移动的应用程序等代码可以通过反向工程读取密码。但也可以将您自己的Java客户端配置为“机密”,因此,仅允许此客户端获取访问令牌以查询资源服务器(API)。
OAuth2带来的不仅仅是简化多客户机场景,而且带有无会话java应用程序的JWT极大地简化了水平可伸缩性和容错性。

  • OAuth2(及其值)
  • 资源-服务器安全配置(使用CORS)

相关问题