我在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
无论我在哪里看,它都是互联网上大多数教程中的一个或另一个。
1条答案
按热度按时间rqqzpn5f1#
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/**
),带有oauth2client
和TokenRelay
过滤器,用于通过会话授权的SPA。此类请求应在OAuth2客户端过滤器链中处理。/resource-server/v1/**
)对安全透明(既不是oauth2client
过滤器也不是TokenRelay
过滤器),用于授权令牌的OAuth2客户端。您可以为此类请求定义另一个“无状态”过滤器链,以保存维护会话所消耗的资源。如果您需要在单个Spring应用程序中配置多个安全过滤器链的说明,请参阅另一个答案(一个带有会话和
oauth2Login
的/bff/**
路由,另一个没有会话也没有登录的/resource-server/**
路由)