Spring Cloud Gateway 结合OAuth2提供UAA服务

本文介绍了微服务中用户认证授权的两种思路,推荐使用独立的用户认证授权服务器,通过Spring Cloud Gateway结合OAuth2实现UAA服务。详细阐述了使用Spring Authorization Server作为UAA服务器,Spring Security OAuth2 Client处理授权,以及终端用户登录授权确认的流程。通过Gateway的令牌中继,实现了无Token获取资源的高效机制。
摘要由CSDN通过智能技术生成

微服务做用户认证和授权一直都是一个难点,随着OAuth2.0的密码模式被作废,更是难上加难了。今天胖哥群里的一个群友搭建用户认证授权体系的时候遇到了一些棘手的问题,这让胖哥觉得是时候分享一些思路出来了。

两种思路

通常微服务的认证和授权思路有两种:

  • 所有的认证授权都由一个独立的用户认证授权服务器负责,它只负责发放Token,然后网关只负责转发请求到各个微服务模块,由微服务各个模块自行对Token进行校验处理。
  • 另一种是网关不但承担了流量转发作用,还承担认证授权流程,当前请求的认证信息由网关中继给下游服务器。

第一种非常简单,而且我在多个微服务项目中都是这样设计的。如果你从来没有设计过,我其实建议按这个思路去做,你只需要搞一个负责管理用户、角色权限的服务器,其它的微服务模块都作为资源服务器自行和这个用户授权服务器进行交互,加上三户模型体系就足以应对各种场景了。

第二种结合了OAuth2体系,网关不仅仅承担流量转发功能,认证授权也是在网关层处理的,令牌会中继给下游服务。这种模式下需要搭建一个UAA(User Account And Authentication)服务。它非常灵活,它可以管理用户,也可以让受信任的客户端自己管理用户,它只负责对客户端进行认证(区别于用户认证)和对客户端进行授

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
课程介绍 【完善体系+精品资料】本课程总计115课时,打造全网最全的微服务体系课程;从微服务是什么、能够做什么开始讲起,绝对零基础入门到精通类型。课程整体脉络十分清晰,每个章节一个知识点,画图+源码+运行讲解,不信你学不会。1、课程先讲解了什么是单体架构、什么是微服务架构、他们之间有什么区别和联系,各自有什么优缺点。2、从本质入手,使用最简单的Spring Boot搭建微服务,让你认清微服务是一种思想和解决问题的手段,而不是新兴技术。3、讲解Spring Boot 与 Spring Cloud服务架构之间的联系,原生的RestTemplate工具,以及Actuator监控端点的使用。4、带着微服务所带来的各种优缺点,为大家引入服务发现与注册的概念和原理,从而引入我们的第一个注册中心服务Eureka。5、引入负载均衡的理念,区分什么是服务端负载均衡,什么是客户端负载均衡,进而引入Ribbon负载均衡组件的详细使用。6、为了解决微服务之间复杂的调用,降低代码的复杂度,我们引入了Feign声明式客户端,让你几行代码学习服务的远程调用。7、为了解决服务之间的稳定性,避免发生雪崩问题,我们引入了Hystrix断路器,服务降级和熔断机制。8、微服务集群十分庞大,监控起来是十分困难的,尤其是对每一个接口的熔断情况进行监控,因此我们引入了Turbine微服务监控。9、微服务的调用是杂乱无章的,可以网状调用,怎么做到统一的入口出口,统一的授权、加密、解密、日志过滤,我们引入了第一代网关Zuul。10、微服务的配置分散,每次要修改配置都要重启服务,因此我们引入了Config配置中心。11、跟上主流,Consul是当前主流的服务注册与发现、配置中心一体化的解决方案。12、阿里的Nacos服务注册与发现、配置中心在国内炙手可热,Nacos 经历过双十一的微服务中间件。13、Turbin做微服务监控还是太弱,我们需要更强大,可视化,操作性更强的监控系统,因此我引入了Spring Boot Admin体系。14、Zuul已经停止更新支持,Spring Cloud官方推荐的二代网关Spring Cloud Gateway更加强大。15、微服务的安全架构体系虽然复杂,但是是有学习条例的,什么是认证授权、什么是OAuth2.0的原理、 JWT、怎么样去开发实现。 课程资料 【独家资料】1、课程附带全部63个项目源码,其中Hoxton版本项目源码37个,Edgware版本项目26个,2、230页高清PDF正版课件。3、附带nacos、consul、cmder等视频配套软件。学习方法1、每一节课程均有代码,较好的方式为一边听我的讲解,一边使用我提供的项目代码进行观察和运行。2、课程体系庞大,但是并不杂乱,每个章节只针对一个知识点,减轻学习压力。3、坚持每天学习1~2个章节,可以在地铁、公交上用手机学习。【完善知识体系图】
### 回答1: Spring Cloud Gateway可以通过整合OAuth2来实现安全认证和授权功能。具体步骤如下: 1. 引入Spring Security和Spring Security OAuth2依赖。 2. 配置Spring Security和OAuth2的相关配置,包括认证服务器地址、客户端ID和密钥等。 3. 在Spring Cloud Gateway中配置路由规则,并添加安全过滤器,将请求转发到认证服务器进行认证和授权。 4. 在路由规则中添加需要进行安全认证和授权的路径和方法。 5. 在授权成功后,将令牌添加到请求头中,以便后续服务可以获取到令牌信息。 通过以上步骤,就可以实现Spring Cloud Gateway的安全认证和授权功能。 ### 回答2: Spring Cloud Gateway是一个轻量级的API网关,而OAuth2是一种基于授权的安全协议,使用Spring Cloud Gateway整合OAuth2可以为API提供更安全的保护。 首先,我们需要在应用程序中引入OAuth2依赖,如下所示: ``` <dependency> <groupId>org.springframework.security.oauth.boot</groupId> <artifactId>spring-security-oauth2-autoconfigure</artifactId> <version>2.3.5.RELEASE</version> </dependency> ``` 接下来,我们需要配置OAuth2具体的认证授权过程。在application.yml文件中进行配置,如下所示: ``` spring: security: oauth2: client: registration: client1: client-id: client1 client-secret: secret1 scope: read,write client-authentication-method: post authorization-grant-type: authorization_code redirect-uri: http://localhost:8081/oauth2/callback client-name: Client 1 provider: provider1 ``` 上述配置中,我们设置了客户端ID、秘钥、范围、客户端认证方式、授权类型等必要参数。其中,“authorization_code”是OAuth2的一种授权类型,通过授权码来获取令牌,这是最常用的一种授权类型。 此外,我们还需要在Gateway中进行相关的配置,包括路由规则、认证过滤器、访问权限控制等。具体实现可以参考springcloudgateway的官方文档。 总的来说,使用Spring Cloud Gateway整合OAuth2可以为API提供更安全的保护,同时也为开发人员提供了更多的灵活性和高效性。 ### 回答3: Spring Cloud GatewaySpring Cloud的一个新项目,它基于Spring 5.0,Spring Boot 2.0和Project Reactor等技术,提供了一种构建API网关的方式。OAuth2是一种基于标准的授权协议,允许客户端(包括第三方应用程序和用户代理)访问受保护的资源。那么,如何在Spring Cloud Gateway中集成OAuth2呢? 首先,我们需要在Spring Cloud Gateway中引入spring-cloud-starter-oauth2依赖。然后,在application.yml配置文件中添加以下配置: ``` spring: security: oauth2: client: registration: custom-client: provider: custom-provider clientId: custom-client-id clientSecret: custom-client-secret authorizationGrantType: authorization_code redirectUriTemplate: "{baseUrl}/login/oauth2/code/{registrationId}" scope: - read - write provider: custom-provider: authorizationUri: https://custom-provider.com/oauth2/authorize tokenUri: https://custom-provider.com/oauth2/token userInfoUri: https://custom-provider.com/oauth2/userinfo userNameAttribute: sub ``` 上面的配置中,我们定义了一个名为custom-client的客户端,该客户端使用了我们自定义的OAuth2提供程序custom-provider。在这里,我们还定义了客户端ID和客户端密码,以及授权类型和重定向URI。此外,我们还定义了客户端的作用域和OAuth2提供程序的授权URI、令牌URI和用户信息URI。 在配置完成后,我们需要为Spring Cloud Gateway定义一个OAuth2路由过滤器。可以使用spring-security-oauth2-autoconfigure自动配置这个过滤器。在application.yml中添加以下配置: ``` spring: cloud: gateway: default-filters: - OAuth2GatewayFilterFactory ``` 注意,OAuth2GatewayFilterFactory是spring-security-oauth2-autoconfigure自动配置的名称。 现在,我们可以在Spring Cloud Gateway的路由定义中使用OAuth2路由过滤器了。例如: ``` spring: cloud: gateway: routes: - id: resource-service uri: http://localhost:8080 predicates: - Path=/resource/** filters: - OAuth2=custom-client ``` 在上面的路由定义中,我们使用了自定义OAuth2客户端custom-client。这将强制执行OAuth2认证,以确保只有已验证用户才能访问资源。 最后,我们需要创建一个OAuth2登录页面。使用spring-security-oauth2-autoconfigure依赖可以自动创建登录页面。在application.yml中添加以下配置: ``` spring: security: oauth2: client: registration: custom-client: clientName: Custom Client ``` 上面的配置中,我们定义了客户端的名称为Custom Client。当用户尝试访问受保护的资源时,系统将调用OAuth2登录页面并要求它输入凭据。 这就是在Spring Cloud Gateway中集成OAuth2的过程。通过使用Spring Cloud GatewayOAuth2,我们可以轻松地构建和保护API网关,实现更好的安全性和可扩展性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值