手摸手 Spring Cloud Gateway + JWT 实现登录认证

本文详细介绍了使用 Spring Cloud Gateway 和 JWT 实现登录认证的全过程,包括认证授权原理、项目架构、登录认证步骤、JWT 令牌生成与验证、网关如何转发请求并携带用户信息以及如何刷新令牌。主要涉及的角色有客户端、网关、认证服务和业务服务。
摘要由CSDN通过智能技术生成

前言

目录

通过本文你会掌握以下知识点:

  • 如何用 认证服务 做登录认证。

  • 如何生成 JWT 令牌(Token)

  • 如何用 Gateway 对 Token 验证。

  • Gateway 如何从 Token 中拿到用户信息并转发给业务服务。

  • 业务服务如何从请求中拿到身份信息处理业务逻辑。

  • 如何刷新令牌。

在讲解之前有必要澄清下什么是认证、授权、凭证,这三个方面是一个系统中最基础的安全设计。

认证、授权、凭证

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,然后处理业务逻辑,处理完后将结果原路返回给客户端。

接下来我们看下项目的整体架构。

项目整体结构

Github 项目地址:https://github.com/Jackson0714/PassJava-Platform
Gitee 项目地址:https://toscode.gitee.com/jayh2018/PassJava-Platform
  • 认证服务:passjava-auth

  • 网关服务:passjava-gateway

  • JWT 公共项目:passjava-jwt,认证服务和网关服务都会引用这个公共项目。

  • 业务服务:passjava-member,会员服务作为本次案

  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringCloud是一个基于Spring Boot的开源微服务框架。SpringCloud GatewaySpringCloud生态中的一个组件,提供了一种基于路由的API网关解决方案。JWT是JSON WEB Token的缩写,是一种用于身份认证和授权的开放标准。OAuth2是一种授权框架,用于向用户授权第三方应用访问他们的资源。 在微服务架构中,每个服务都是独立的,网关作为服务的入口,可以实现对外的请求过滤和路由。SpringCloud Gateway使用HttpClient进行内部请求的调度和路由。同时,它还提供了一些高阶的路由和过滤功能,如重定向、URL重写、限流、熔断、重试等。 JWT是一种轻量级的认证方案,通过在HTTP请求中添加一个JSON WEB Token,实现对用户进行身份认证和授权。JWT的使用极大地简化了认证过程,前后端可以通过JWT判断用户的身份和权限。 OAuth2为开发者提供了一种授权框架,可以授权第三方应用获取用户访问他们的资源。OAuth2支持多种授权类型,如授权码模式、密码模式、客户端模式和隐式模式。使用OAuth2,可以更好地保护用户的隐私和安全。 综上所述,SpringCloud GatewayJWT和OAuth2都是现代化的解决方案,对于设计和开发微服务架构的应用程序来说,它们都是必不可少的组件。有了它们,开发人员可以更好的搭建分布式架构,确保数据安全性、隐私安全性和服务的可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值