Spring Cloud Gateway实现鉴权认证流程总结(一)

发布时间 2023-11-14 17:58:47作者: 郭慕荣

认证、授权、凭证
1.1 认证(Authentication)
认证表示你是谁。系统如何正确分辨出操作用户的真实身份,比如通过输入用户名和密码来辨别身份。
1.2 授权(Authorization)
授权表示你能干什么。系统如何控制一个用户能看到哪些数据和操作哪些功能,也就是具有哪些权限。
1.3 凭证(Credential)
表示你如何证明你的身份。系统如何保证它与用户之间的承诺是双方当时真实意图的体现,是准确、完整和不可抵赖的。接下来我们看下使用 JWT 作为凭证完成认证的原理。认证的原理,在如下的认证时序图中,有以下几种角色:

  • 客户端:表示 APP 端或 PC 端的前端页面。
  • 网关:表示 Spring Cloud Gateway 网关服务,这里。
  • 认证服务:用来接收客户的登录请求、登出请求、刷新令牌的操作。
  • 业务服务:和系统业务相关的微服务。

认证和校验身份的流程如下所示:

认证和校验身份流程
① 用户登录:客户端在登录页面输入用户名和密码,提交表单,调用登录接口。
② 转发请求:这里会先将登录请求发送到网关服务 passjava-gateway,网关对于登录请求会直接转发到认证服务 passjava-auth。(网关对登录请求不做 token 校验,这个可以配置不校验哪些请求 URL)
③ 认证:认证服务会将请求参数中的用户名+密码和数据库中的用户进行比对,如果完全匹配,则认证通过。
④ 生成令牌:生成两个令牌:access_token 和 refresh_token(刷新令牌),刷新令牌我们后面再说,这里其实也可以只用生成一个令牌 access_token。令牌里面会包含用户的身份信息,如果要做权限管控,还需要在 token 里面包含用户的权限信息,权限这一块不在本篇展开,会放到下一篇中进行讲解。
⑤ 客户端缓存 token:客户端拿到两个 token 缓存到 cookie 中或者 LocalStorage 中。
⑥ 携带 token 发起请求:客户端下次想调用业务服务时,将 access_token 放到请求的 header 中。
⑦ 网关校验 token:请求还是先到网关服务,然后由它校验 access_token 是否合法。如果 access_token 未过期,且能正确解析出来,就说明是合法的 access_token。
⑧ 携带用户身份信息转发请求:网关将 access_token 中携带的用户的 user_id 放到请求的 header 中,转发给真正的业务服务。
⑨ 处理业务逻辑:业务服务从 header 中拿到用户的 user_id,然后处理业务逻辑,处理完后将结果原路返回给客户端。

参考文档:https://zhuanlan.zhihu.com/p/553821824?utm_id=0