登录流程图
🌟数据准备
数据库创建
数据库表创建
相关SQL语句
/* Navicat Premium Data Transfer Source Server : localhost Source Server Type : MySQL Source Server Version : 50709 Source Host : localhost:3306 Source Schema : demo Target Server Type : MySQL Target Server Version : 50709 File Encoding : 65001 Date: 04/08/2023 11:05:33 */ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for sys_user -- ---------------------------- DROP TABLE IF EXISTS `sys_user`; CREATE TABLE `sys_user` ( `id` int(50) NOT NULL AUTO_INCREMENT, `user_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, `user_password` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of sys_user -- ---------------------------- INSERT INTO `sys_user` VALUES (1, 'daencode', '123456'); INSERT INTO `sys_user` VALUES (2, '隔壁老王', '123456'); INSERT INTO `sys_user` VALUES (3, '太监小李', '123456'); SET FOREIGN_KEY_CHECKS = 1;
🌟JWT介绍
基本概念
JWT(JsonWebToken)是
一种轻量级的跨域身份验证解决方案
。通常被用于无状态身份验证机制,将用户信息签名打包进行传输。
结构
组成结构:header.payload.signature
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
- header:头部。包含了
算法类型和令牌类型
两部分内容。
- payload:载荷或者称之为Claims声明。包含
用户或者其他实体的信息
。其中的数据结构以Key-Value形式存在。通常分为以下3个类别:
注册声明
:预定义信息。如iss(签发者)、exp(过期时间)、sub(主题)等。公共声明
:根据需要自定义的字段,例如用户 ID、角色、权限等。私有声明
:自定义的私有字段,用于双方约定的额外信息。
- signature:签名。将头部和载荷进行签名,确保数据的完整性和防止篡改。
签名需要使用头部中指定的算法和密钥进行计算
。其中的your-256-bit-secret为私钥。
注意:因header和payload部分为base64编码解码,并不是安全的,所以payload中不能放敏感信息。