如何设计经过身份验证的请求和前端

问题描述 投票:0回答:1

我目前正在开发一个项目,我的后端使用 Spring Boot、Spring security + keycloak 并在 localhost:8081 上运行。

我的前端(svelte)运行在 http://127.0.0.1:5173/ 上,并且 url http://127.0.0.1:5173/products 需要从 localhost:8081/products 访问数据(需要一个登录)但没有出现来自 keycloak 的登录页面。

换句话说,我想要实现的目标: 我希望网址http://127.0.0.1:5173/products重定向到localhost:8081/products,它重定向到keycloak登录页面,成功登录后我想返回到http://127.0.0.1: 5173/产品 我可以在其中看到数据。

这个问题有一个优雅的解决方案吗?我真的被这个问题困扰了,这是我的第一个项目。

提前致谢!

spring-boot authentication keycloak svelte
1个回答
1
投票

一些 OAuth2 措辞:

  • Keycloak 是一个授权服务器(兼容 OIDC)
  • Svelte 应用程序是客户端
  • Spring REST API 是一个资源服务器

精简的应用程序配置

与任何其他基于 Javascript 的 Web 应用程序(Angular、React、Vue 等)一样,有两个相同的选项可用于保护 Svelte 应用程序:

  • “旧”方式:
    • 在 Keycloak 中声明“公共”客户端
    • 将 Svelte 应用程序配置为 OAuth2 公共客户端,并使用您选择的现有 OIDC 库(组件)来:
      • 使用 Keycloak 中装饰的“公共”客户端
      • 根据 Keycloak 对用户进行身份验证(套接字与 spring API 不同)
      • 添加一个授权标头,其中包含从 Keycloak 检索到的 JWT 访问令牌(向安全 REST 端点发出请求时)
  • 现在推荐的方式:应用BFF模式。借助前端后端,Web 应用程序可以通过服务器上中间件上的会话(和 CSRF 令牌)进行保护。该中间件负责获取和存储 OAuth2 令牌。然后,在将请求从 Web 应用程序转发到资源服务器之前,它将会话 cookie 替换为包含访问令牌的承载授权标头。
    spring-cloud-gateway
    可以配置为 BFF(
    TokenRelay
    过滤器和带有
    oauth2Login
    的 Spring OAuth2 客户端配置)。我已经在 Baeldung 上写了一个教程

REST API

使用 JWT 解码器将 Spring API 配置为安全资源服务器。

我编写了一组教程,用于使用 OAuth2 配置 Keycloak 和 Spring 应用程序。

© www.soinside.com 2019 - 2024. All rights reserved.