jwt使用

本文详细介绍了登录验证流程,包括前端输入账号密码发送请求、后端验证、token生成与验证、权限控制等步骤。重点阐述了使用axios、jsonwebtoken库进行数据交换和安全验证,以及如何处理token的存储与验证,确保用户权限的正确管理。

登录验证

1.在输入框中输入账号和密码,利用axios发送到后端的某一个接口(/token)

2.后端接受账号和密码之后,遍历数据库中的对象,判断用户名和密码是否存在且正确,不正确的话返回错误信息

3.定义token生成方法,参数是user.id,权限数字

4.下载jsonwebtoken库,利用库中的sign方法生成token,sign接受几个参数,第一个对象是用户基本信息对象,第二个对象是密钥,第三个对象是过期时间

5.当用户名和密码验证通过时,将生成的token返回给客户端

6.浏览器读取token值,保存在localstroge中,使用this.$router.push()进入主页面

7.定义token的验证规则,jsonwebtoken库中的verify验证token的正确性,第一个参数是token,第二个参数是密钥

8.安装base64包,实现一个编码方法,先从localstorage中读取token数值,调用base64encode方法,在发送axios请求时,在请求头中添加加密后的token

权限控制

1.导入basicAuth包,解析浏览器传输来的token

2.如果token没有的话,返回错误信息

3.定义token的验证规则,jsonwebtoken库中的verify验证token的正确性,第一个参数是token,第二个参数是密钥,如果token不合法或者过期返回错误信息

### JWT 使用教程详解 #### 1. JWT 基础概念 JSON Web Token (JWT) 是一种开放标准 RFC 7519,用于在网络应用环境间安全地传输信息[^1]。它是一个紧凑且自包含的字符串,能够传递声明(Claims),这些声明通常被用来在各方之间传达身份验证和其他用户相关信息。 JWT 的主要组成部分包括三部分:Header、Payload 和 Signature。每一部分都通过 Base64Url 编码并用点号 `.` 进行分隔[^1]。 #### 2. JWT 结构分析 - **Header**: 描述令牌元数据,通常是加密算法的信息。 - **Payload**: 存储实际的数据或声明,可以分为注册声明(Registered Claims)、公共声明(Public Claims)和私有声明(Private Claims)。 - **Signature**: 通过对前两部分进行签名来确保数据未被篡改。 具体生成过程如下: ```plaintext token = base64urlEncode(header) + "." + base64urlEncode(payload) + "." + HMACSHA256(base64urlEncode(header) + "." + base64urlEncode(payload), secretKey) ``` #### 3. 工作原理 当客户端向服务器发送请求时,可以通过 HTTP 头部字段中的 `Authorization` 来携带 JWT。例如: ```http GET /api/resource HTTP/1.1 Host: example.com Authorization: Bearer <token> ``` 服务器接收到此请求后会解析并验证该令牌的有效性和合法性。 #### 4. 实现方式举例 ##### Python 中的实现 Python 可以利用 PyJWT 库轻松完成 JWT 的编码与解码操作。下面展示了一个简单的例子[^4]: ```python import jwt from datetime import datetime, timedelta def create_jwt_token(secret_key="your_secret", algorithm="HS256"): payload = { "sub": "1234567890", "name": "John Doe", "iat": int(datetime.utcnow().timestamp()), "exp": int((datetime.utcnow() + timedelta(minutes=30)).timestamp()) } encoded_jwt = jwt.encode(payload, secret_key, algorithm=algorithm) return encoded_jwt def decode_jwt_token(encoded_jwt, secret_key="your_secret", algorithms=["HS256"]): try: decoded_payload = jwt.decode(encoded_jwt, secret_key, algorithms=algorithms) return decoded_payload except jwt.ExpiredSignatureError as e: return f"Token expired: {e}" except jwt.InvalidTokenError as e: return f"Invalid token: {e}" if __name__ == "__main__": token = create_jwt_token() print(f"Encoded JWT: {token}") decoded_data = decode_jwt_token(token) print(f"Decoded Data: {decoded_data}") ``` ##### Laravel 中的应用 Laravel 框架下集成 Tymon\JWTAuth 扩展包可方便管理基于 JWT 的认证逻辑[^2]。首先需安装依赖库并通过配置文件设置别名以便快速调用相关方法: ```php // 配置 aliases 数组中加入以下内容 'JWTAuth' => 'Tymon\JWTAuth\Facades\JWTAuth', 'JWTFactory' => 'Tymon\JWTAuth\Facades\JWTFactory', // 创建 Token 示例 $user = Auth::user(); $token = JWTAuth::fromUser($user); // 验证 Token 示例 try { $user = JWTAuth::parseToken()->authenticate(); } catch (\Tymon\JWTAuth\Exceptions\TokenExpiredException $e) { // Token过期处理... } ``` #### 5. 安全注意事项 尽管 JWT 提供了一种灵活的身份验证机制,但在实际开发过程中仍需要注意一些潜在的安全隐患。比如避免泄露敏感信息到 Payload 或者 Header 当中;始终保护好 Secret Key 不被暴露给未经授权方等等[^3]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每天都在掉头发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值