相关文章推荐
闯红灯的煎鸡蛋  ·  HttpUtility.UrlEncode ...·  1 月前    · 
重情义的椰子  ·  freemarker - ...·  1 年前    · 

Spring Cloud Gateway 整合 OAuth2.0 实现分布式统一认证授权③

love374
发布于 2022-7-11 11:45
浏览
0收藏

3、认证管理器自定义

新建一个JwtAuthenticationManager,需要实现ReactiveAuthenticationManager这个接口。

认证管理的作用就是获取传递过来的令牌,对其进行解析、验签、过期时间判定。

详细代码如下:

Spring Cloud Gateway 整合 OAuth2.0 实现分布式统一认证授权③-鸿蒙开发者社区
逻辑很简单,就是通过JWT令牌服务解析客户端传递的令牌,并对其进行校验,比如上传三处校验失败,抛出令牌无效的异常。

抛出的异常如何处理?如何定制返回的结果?

这里抛出的异常可以通过Spring Cloud Gateway的全局异常进行捕获,这个内容在Spring Cloud Gateway夺命连环10问?这篇文章有详细介绍。下面只贴出关键代码,如下:

Spring Cloud Gateway 整合 OAuth2.0 实现分布式统一认证授权③-鸿蒙开发者社区
4、鉴权管理器自定义
经过认证管理器JwtAuthenticationManager认证成功后,就需要对令牌进行鉴权,如果该令牌无访问资源的权限,则不允通过。

新建JwtAccessManager,实现ReactiveAuthorizationManager,代码如下:

Spring Cloud Gateway 整合 OAuth2.0 实现分布式统一认证授权③-鸿蒙开发者社区
这里的逻辑很简单,就是取出令牌中的权限和当前请求资源URI的权限对比,如果有交集则通过。

①处的代码什么意思?

这里是直接从Redis中取出资源URI对应的权限集合,因此实际开发中需要维护资源URI和权限的对应关系,这里不细说,为了演示,陈某直接在项目启动的时候向Redis中添加了两个资源的权限,代码如下:

Spring Cloud Gateway 整合 OAuth2.0 实现分布式统一认证授权③-鸿蒙开发者社区
“注意:实际开发中需要维护资源URI和权限的对应关系。”


②处的代码什么意思?

这处代码就是取出令牌中的权限集合

③处的代码什么意思?

这处代码就是比较两者权限了,有交集,则放行。

5、令牌无效或者过期时定制结果
在第4步,如果令牌失效或者过期,则会直接返回,这里需要定制提示信息。

新建一个RequestAuthenticationEntryPoint,实现ServerAuthenticationEntryPoint,代码如下:

Spring Cloud Gateway 整合 OAuth2.0 实现分布式统一认证授权③-鸿蒙开发者社区
6、无权限时定制结果
在第4步鉴权的过程中,如果无该权限,也是会直接返回,这里也需要定制提示信息。

新建一个RequestAccessDeniedHandler,实现ServerAccessDeniedHandler,代码如下:

文章转自公众号:码猿技术专栏

已于2022-7-11 11:45:18修改
收藏
回复
回复
相关推荐