【问题标题】:spring boot security use keycloak sessionsSpring Boot 安全性使用 keycloak 会话
【发布时间】:2022-09-28 01:56:35
【问题描述】:

我是安全新手,我正在尝试了解如何在不过度使用的情况下实施适当的安全措施。

以下是我的问题。

  1. 我不想让第 3 方客户端使用我的 API,因此我看不到 OAuth 2.0 的任何重要性。因此,我希望在我的 Spring Boot Security 中使用由 keycloak(或 Ory Kratos)生成的会话。关于如何做到这一点的任何指导。
  2. 我遇到了一个应用程序https://opstra.definedge.com/,它使用keycloak 实现了安全性(可以查看URL 模式)。但是在请求中,在执行任何网络请求时,我在 chrome DevTools 网络选项卡中看不到任何 JWT 令牌。我认为他们正在按照我想要的方式实施它。关于如何实施的任何概述。

    标签: spring spring-boot spring-security keycloak


    【解决方案1】:

    我不是definedge 的架构师,但我很确定他们不会在 Opstra 中使用 Keycloak 会话(为此,他们必须在 Keycloak servlet 中运行 Opstra)。看起来他们更像是使用 OAuth2 从Java 客户端并且该客户端启用了会话(JSESSIONID cookie)。这个 java 客户端很有可能使用访问令牌来授权对资源服务器的请求,我们只是无法从浏览器中看到它。

    限制允许使用您的 API 的客户端与授权方法无关:

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

    限制您的 API 客户端更多的是关于 CORS 配置,其目的只是为了:过滤哪些来源(主机 + 端口)可以访问哪些资源位置(URL)

    Keycloak 中有一个机密客户端的概念,除了客户端 ID 之外,客户端还必须提供密码才能交换访问令牌的授权代码,但这不适用于在您无法信任的设备上运行的客户端(Angular、Vue、React 、本地移动应用程序等):代码可以通过逆向工程来读取该密码。

    OAuth2 带来的不仅仅是简化多客户端场景,而且带有无会话 Java 应用程序的 JWT 极大地简化了水平可扩展性和容错性。你应该阅读this article 来复习

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-09
      • 2017-08-07
      • 2019-10-02
      • 1970-01-01
      • 2018-01-16
      • 2018-10-21
      • 1970-01-01
      • 2020-02-22
      相关资源
      最近更新 更多