如何将Spring MVC应用程序与Spring Cloud Gateway with OAuth2.0 Security集成?

2ekbmq32  于 2023-10-15  发布在  Spring
关注(0)|答案(1)|浏览(138)

我有一个Sping Boot MVC + Thymeleaf应用程序,它通过Spring Cloud Gateway与一堆微服务进行对话。
mvc_app -> gateway -> (service_a, service_b,...)
现在,我想实现基于OAuth 2的安全性,我想将身份验证过程集中在网关级别。
这意味着:
1.如果用户尝试通过网关访问任何resource_servers(service_a、service_B等)上的安全资源,网关应将用户重定向到IdP登录页面。
1.成功验证后,Gateway应使用accessToken访问受保护的资源。
这可以如下实现:
1.使用spring-boot-starter-oauth2-client和适当的提供程序/客户端配置将网关作为OAuth 2客户端
1.使用TokenRelayfilter将Token转发到下游的resource_servers。

问题:

当您通过网关进行身份验证时,身份验证状态将在网关应用程序级别进行维护。在网关成功认证后,如何向mvc_app发送回身份验证令牌、IdToken,以便在以后的请求中使用相同的身份验证令牌?

x7rlezfr

x7rlezfr1#

你应该重新考虑一下你的意图:您希望使用TokenRelay filter在使用会话保护的前端和使用令牌保护的微服务(资源服务器)之间进行桥接,但您希望随后为前端提供令牌。有什么意义?
你的Spring MVC前端可以是一个可靠的OAuth2客户端。您应该将其配置为OAuth2“机密”客户端(使用oauth2login),并使网关对安全性透明(根本没有)。
Spring REST客户端(WebClientRestTemplate@FeignClient,甚至是新的RestClient)都被设计为与授权客户端存储库集成,并在会话中使用访问令牌透明地填充Authorization头。请参阅您选择的手册了解详细信息。
当前端是SPA(Angular、React、Vue等)或本机应用程序时,将网关配置为带有登录和TokenRelay过滤器的OAuth2客户端是很有意义的,因为它不能是机密客户端。实际上,你不想为这样的应用程序提供OAuth2令牌:您只需使用会话(和CSRF)cookie对其进行授权,并在服务器上保持令牌安全。

相关问题