Fast-JWT

想象一下,JWT(JSON Web Token)像是一个包含了一定权限的魔法门禁卡。这个门禁卡非常智能,它内部封印着一些秘密信息,这些信息被魔法(加密算法)保护着,只有特定的守卫(服务器)能解开并验证这些信息的真实性。

1. 发行门禁卡(签发JWT):当你入住一家高科技酒店(注册或登录一个应用),前台(服务器)会给你一张魔法门禁卡(JWT)。这张卡上有三个区域:
   - 公开区:记录你的基本信息,比如房间号(用户ID);
   - 保密区:包含更多敏感信息,如入住时间(过期时间)、你的权限等级等,这些信息被加密处理;
   - 签名区:这是魔法施展的地方,确保卡片没被篡改,就像一个防伪标签

2. 使用门禁卡(携带JWT访问资源):每次你想进入健身房(访问受保护的API资源),你只需出示这张门禁卡给健身房门口的机器人守卫(API服务器)。机器人守卫会检查卡上的魔法签名(验证JWT的完整性),确认卡是真的,并且看看你是否有权限进入(检查JWT中的过期时间和权限信息)。

3. 门禁卡的有效期限:这张魔法门禁卡是有有效期的,一旦过了时间,机器人守卫就会认为卡已失效,不再放你进入。

通过这个比喻,JWT就是一个轻量级的安全通行证,它携带了用户的身份信息和权限,并且因为经过加密处理,能在不同系统间安全传输,使得用户能够在不反复输入密码的情况下访问多个受保护的服务,同时保障了信息的安全性。


在FastAPI框架下实现用户注册、发送短信验证码以及基于短信验证码的登录功能。下面是对整个流程的整合解释,特别关注JWT在登录过程中如何发挥作用:

用户注册 (/api/user/register)

  1. 接收请求: 用户通过API传递用户名(这里使用手机号作为用户名)和其他必要信息(假设在UserRegister模型中定义)来注册。
  2. 检查用户名是否存在: 系统查询数据库判断该手机号是否已被注册。
  3. 创建用户: 如果手机号未被注册,则创建新用户并存储到数据库。
  4. 返回响应: 注册成功后返回成功消息及用户信息。此步骤不涉及JWT。

发送短信验证码 (/api/user/smscode)

  1. 接收请求: 用户提供手机号请求发送短信验证码。
  2. 验证用户存在: 系统检查数据库中是否存在该手机号对应的用户。
  3. 生成并发送验证码: 系统生成一个随机的6位数字验证码,并通过短信服务将其发送给用户。
  4. 更新验证码: 将生成的验证码存入用户记录,并提交数据库事务。
  5. 返回响应: 告知用户验证码发送成功。这一步也不直接涉及JWT。

用户登录 (/api/user/login)

  1. 接收请求: 用户提交手机号(作为用户名)和收到的短信验证码,尝试登录。
  2. 验证登录信息: 系统查询数据库,检查提供的手机号和验证码是否匹配。
  3. 登录成功处理: 若匹配成功,使用create_access_token函数基于用户的手机号创建一个JWT访问令牌。这个函数会根据配置设置JWT的过期时间,并使用JWT_SECRET_KEY对包含用户标识(手机号)和过期时间的payload进行加密。
  4. 更新用户登录时间: 记录用户的最后登录时间。
  5. 返回响应: 成功登录后,返回包含JWT的access_token、类型("bearer")以及成功消息。客户端后续与受保护资源交互时需在HTTP请求头中携带此JWT,以证明用户身份。

JWT的作用解释

  • 安全性: JWT是经过加密的,确保在传输过程中即使被截获,攻击者也无法轻易读取其中的信息,提高了数据传输的安全性。
  • 无状态性: 服务器不需要存储会话信息,因为所有必要的认证数据都包含在JWT中。这意味着可以更容易地扩展应用程序,因为任何能够解码JWT的服务实例都能验证用户身份。
  • 简化认证流程: 用户首次登录时,通过短信验证码验证身份后,服务器发放JWT。之后,用户只需携带JWT即可访问受保护资源,无需每次都重新验证密码或短信验证码,提升了用户体验。

综上,在这个示例中,JWT主要用于实现用户登录后的身份验证和授权,保证了用户在不同接口间访问时的一致性和安全性,而不需要在每次请求时都重新验证其身份。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值