oauth2.0 如何将Spring Cloud Gateway用于API和UI

y53ybaqx  于 11个月前  发布在  Spring
关注(0)|答案(1)|浏览(112)

我在API和UI前面使用Spring Cloud Gateway。我希望UI路径触发oidc流,在那里它们会显示来自keycloak的登录屏幕等。但是当API被调用时,我希望资源服务器流。我可以配置Spring Cloud Gateway来处理两个路由不同吗?如果是,如何处理?
我遵循以下教程设置API安全jwt流,我使用Keycloak作为Idp:https://blog.devops.dev/spring-cloud-gateway-oauth2-security-with-keycloak-jwt-tokens-and-securing-it-with-https-ssl-2166d8009531
无论我在哪里看,它都是互联网上大多数教程中的一个或另一个。

rqqzpn5f

rqqzpn5f1#

  • OIDC* 和 * 资源服务器 * 都不是 * 流 *。您可能分别指的是最终用户 * 登录 * 的authorization_code流,并使用Bearer令牌请求授权(无论客户端使用什么 * 流 * 来获取令牌,都可以这样做)。

根据最新的建议,您不应该将SPA前端配置为OAuth2客户端。您应该使用会话(和CSRF保护),而不是令牌,来授权从SPA到后端的请求,但很少有教程遵循OAuth2和SPA(或移动的应用程序)的最佳实践。
正如您已经了解到的,spring-cloud-gateway可以配置为带有oauth2Login的OAuth2客户端。它还可以在到资源服务器的路由上配置TokenRelay过滤器,以便在转发请求之前将会话cookie替换为会话中的访问令牌。
我写了一个教程,将spring-cloud-gateway配置为SPA的BFF。前端是用Angular编写的,但将其调整为Vue应该很简单。
本教程不再介绍的是需要通过网关路由SPA(使用会话授权)和OAuth2客户端(使用令牌授权)的情况。第二种情况是合法的,当您在信任的服务器上运行服务,并且将其配置为机密客户端(例如使用client_credentials或Thymeleaf UI的批处理)。
在这种情况下,您可以在网关上定义不同的路由,重定向到相同的资源服务器:

  • 一个(假设是/bff/v1/**),带有oauth2clientTokenRelay过滤器,用于通过会话授权的SPA。此类请求应在OAuth2客户端过滤器链中处理。
  • 另一个(比如说/resource-server/v1/**)对安全透明(既不是oauth2client过滤器也不是TokenRelay过滤器),用于授权令牌的OAuth2客户端。您可以为此类请求定义另一个“无状态”过滤器链,以保存维护会话所消耗的资源。

如果您需要在单个Spring应用程序中配置多个安全过滤器链的说明,请参阅另一个答案(一个带有会话和oauth2Login/bff/**路由,另一个没有会话也没有登录的/resource-server/**路由)

相关问题