Spring Cloud GateWay 鉴权路由

背景

通过用户的一些基本信息生成Token(第三方Team提供此service),在向GateWay发送请求之前会使用RestTemplate请求第三方Token接口获取JWT格式Token,在Header中添加此Token.

然后在请求gateway之后,转发之前,向自己Cloud 中的Auth Service发起请求验证请求,解析Token.判断用户是否存在权限访问Api.

直接上GateWay,Auth Service 只需解析JWT Token,返回用户所拥有的Group,根据Group来确定用户拥有那些服务的操作权限。

GateWay

所需依赖

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

实现GlobalFilter调用AuthService实现鉴权

接口实现GlobalFilter

拦截请求,获取到Header中的Token,Order优先级

@Component
@Order(0)
public class TokenHeaderFilter implements GlobalFilter, Ordered {


    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        try {
            HttpHeaders headers = exchange.getRequest().getHeaders();
            String Token = headers.getFirst("Token");
             //随便写一句,勿用!就是根据Token去获取用户所拥有的权限即可
            //ResponseDetail 
            //responseDetail=restTemplate.postForObject(authServiceurl,token);
            //自定义response类成功则放过请求
            if(responseDetail.success){
              //把新的 exchange放回到过滤链
              return chain.filter(exchange);
            };
        } catch (Exception e) {
           //抛出自定义异常
           throw new GateWayException(".....");
        }
    }

yaml配置实现路由

spring:
  cloud:
    gateway:
      routes:
        - id: service01                       #路由ID,一般是其他微服务名称
          uri: http://service01url:8080       #匹配后提供服务的路由地址
          predicates:
            - Path=/service01/**              #断言,路径相匹配的进行路由

        - id: service02  
          uri: http://service02url:8080         
          predicates:
            - Path=/service02/**             

此上为自己简单路由配置。

更多路由转发配置SpringCloud gateway (史上最全) - 疯狂创客圈 - 博客园

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spring Cloud Gateway是一个用于提供网关服务的框架,它可以作为API网关来实现路由鉴权、限流等功能。在鉴权方面,可以通过在网关中配置认证过滤器来实现。常用的鉴权方式有JWT、OAuth2等。 ### 回答2: SpringCloud Gateway是一个基于SpringBoot的API网关,它提供了路由、负载均衡、限流、请求转发等功能,可作为微服务架构中的统一入口。在实际开发中,为了保证API的安全性,网关一般都需要进行鉴权SpringCloud Gateway提供了多种鉴权机制: 1. 基于JWT的Token鉴权:用户在登录成功后,后端返回一个JWT Token,用户在以后的每一次请求都带上该Token,网关在拦截到请求时,通过读取Token里面的信息进行用户身份的验证。 2. 基于Oauth2.0的鉴权:Oauth2.0协议定义了四种角色,包括资源拥有者、客户端、授权服务器、资源服务器,可以通过Oauth2.0协议对访问API的用户进行身份验证和授权验证,保证API的安全性。 3. 基于IP的鉴权:通过限制客户端的IP地址来进行鉴权,只允许来自公网IP地址的请求才能访问API。 4. 基于请求参数的鉴权:对URL中的特定参数进行验证,只有带有特定参数的请求才能访问API,例如Bearer Token。 5. 基于Header的鉴权:通过读取请求中的Header进行鉴权,例如通过读取Authorization Header中的Token进行身份验证。 以上是几种常见的鉴权机制,根据具体的业务需求和安全策略,可以选择合适的鉴权方法来保证API的安全性。在SpringCloud Gateway中,鉴权功能可以通过实现GatewayFilterFactory接口来自定义实现,并通过配置文件将其添加到Gateway中进行使用。 ### 回答3: SpringCloud Gateway是一款基于SpringBoot的API网关服务,可以统一处理多个后端服务的请求,其中的鉴权功能在实际的应用场景中尤为重要。通过鉴权功能,可以在API网关处对访问者的身份进行验证,有效保障API服务的安全性。 在SpringCloud Gateway中,可以通过多种方式实现鉴权,其中一种常用的方式是使用JWT(JSON Web Tokens)。JWT是一种轻量级的身份验证和授权标准,可以将用户身份信息打包成Token,传递到API网关层进行校验。在Gateway中,需要在路由规则中添加拦截器(GatewayFilter),通过该拦截器验证Token的有效性,如果Token无效或已过期则拒绝访问。 具体实现步骤如下: 1. 在网关服务的yml配置文件中配置JWT鉴权相关参数,如JWT密钥、Token失效时间等。 2. 在路由规则中添加JWT过滤器拦截器,对请求进行拦截。 3. 在过滤器中获取请求头中的Token信息,并解析Token获取用户身份信息。 4. 通过验证用户身份信息,判断用户是否具有访问该API的权限。 5. 根据用户身份信息,设置相应的请求头信息,将请求转发到后端服务。 总的来说,SpringCloud Gateway鉴权功能可以有效保障API服务的安全性,提高系统的可靠性和稳定性。但是,在实际应用中还需要考虑其他方面的安全问题,如数据加密、防火墙规则等。通过综合应对,可以有效保障系统的安全性和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值