首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Spring授权服务器配置Spring网关

用Spring授权服务器配置Spring网关
EN

Stack Overflow用户
提问于 2021-09-02 12:21:16
回答 1查看 1.3K关注 0票数 3

我有一个Spring应用程序,它有以下的Gradle依赖关系:

代码语言:javascript
复制
implementation group: 'org.springframework.cloud', name: 'spring-cloud-starter-gateway'
implementation 'com.netflix.eureka:eureka-core'
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
implementation 'org.springframework.boot:spring-boot-starter-actuator'

路由配置:

代码语言:javascript
复制
@Bean
public RouteLocator routes(RouteLocatorBuilder builder, LoggingGatewayFilterFactory loggingFactory) {

    return builder.routes()
            .route("service_route_clients_summary", r -> r.path("/management/home/clients/summary")
                    .filters(f -> f.rewritePath("/api/management/home/clients/summary", "/management/home/clients/summary")
                            .filter(loggingFactory.apply(new LoggingGatewayFilterFactory.Config("My Custom Message", true, true))))
                    .uri("lb://merchant-hub-admin-service:8000/management/home/clients/summary"))
            .build();
}

在使用成功授权后,我希望将/api/management/home/clients/summary转发到内部链接/management/home/clients/summary。是否可以不向外界公开使用Spring授权服务器?实现这一点的正确方法是什么?

代码示例:https://github.com/rcbandit111/Spring_Cloud_Gateway_POC

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-20 11:40:54

是否可以在不向外界公开的情况下使用?

正在实现OAuth2协议。如果我们看一下规范,我们可以看到它自然是一个客户端,它想要验证自己:https://datatracker.ietf.org/doc/html/rfc6749#section-1.2。在您的设置中,客户端似乎不是网关本身,而是一个应用程序。因此,如果该应用程序使用,它将在与网关进行第一次交互之前使用它进行身份验证(大多数情况下,这意味着获取令牌)。因此,要回答这个问题,如果您想要使用OAuth2,您需要在应用程序和之间建立一个直接的连接,这意味着它需要暴露在外部。这是完全合理的,因为OAuth2不是用于单个服务,而是用于许多不同的服务,例如允许单点登录。

实现这一点的正确方法是什么?

您可以设置您自己的Spring授权服务器,实现您的自定义授权代码授权逻辑,以便客户端能够对自己进行身份验证并获取令牌。例如,这可以是一个JSON令牌(JWT)。这可以独立于您的网关和其他服务。

要在网关上授权请求,有不同的方法。您可以自己实现一个逻辑,它从请求中读取一个JWT,并使用或其他身份提供程序对其进行授权,这是您可能拥有的。您还可以在中使用Security,这一点在这里描述:https://spring.io/blog/2019/08/16/securing-services-with-spring-cloud-gateway。这绝对是实现它的正确方法。

还有一件事:正如您所看到的,OAuth2是有代价的,理解和配置并不简单。在部署这样的设置之前,您必须详细了解它。另一方面,这是一个坚实的标准,你可以有一个功能,如单点-打开框。因此,如果您只需要单个或多个应用程序对单个服务的授权,那么可能有更容易获得令牌和保护应用程序的方法,而OAuth2可能是过火了。但是,如果你有大量的服务和应用程序,应该通过一个中央(有时是全公司范围)的解决方案来验证,那么OAuth2真的会有回报。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69030184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档