四川省建设人才网站2018,网上做网站怎么赚钱吗,网页制作免费模板,免费域名空间注册JWT学习资料 1.什么是JWT?【头部(Header)、载荷(Payload)和签名(Signature)】2.为什么要用JWT?3.JWT 使用全局变量JWT 创建JWT的应用#xff08;token放在返回信息中#xff09;JWT验证 4.JWT 原理 1.什么是JWT?【头部(Header)、载荷(Payload)和签名(Signature)】
JWT(JS… JWT学习资料 1.什么是JWT?【头部(Header)、载荷(Payload)和签名(Signature)】2.为什么要用JWT?3.JWT 使用全局变量JWT 创建JWT的应用token放在返回信息中JWT验证 4.JWT 原理 1.什么是JWT?【头部(Header)、载荷(Payload)和签名(Signature)】
JWT(JSON Web Token)是一种开放标准(RFC 7519)用于在网络上安全传输信息的简洁、自包含的方式。它通常被用于身份验证和授权机制。
JWT由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)
头部(Header):包含了关于生成该 JWT 的信息以及所使用的算法类型。载荷(Payload):包含了要传递的数据例如身份信息和其他附属数据。JWT 官方规定了7个字段供选用:
iss(Issuer):签发者。sub(Subject):主题。aud(Audience):接收者。exp(Expiration time):过期时间。onbf(Not Before):生效时间。iat(Issued At):签发时间。jti(JWT ID):编号。
签名(Signature):使用密钥对头部和载荷进行签名以验证其完整性。
2.为什么要用JWT?
JWT 相较于传统的基于会话(Session)的认证机制具有以下优势:
无需服务器存储状态:传统的基于会话的认证机制需要服务器在会话中存储用户的状态信息包括用户的登录状态、权限等。而使用 JWT服务器无需存储任何会话状态信息所有的认证和授权信息都包含在 JWT 中使得系统可以更容易地进行水平扩展。跨域支持:由于 JWT 包含了完整的认证和授权信息因此可以轻松地在多个域之间进行传递和使用实现跨域授权。适应微服务架构:在微服务架构中很多服务是独立部署并且可以横向扩展的这就需要保证认证和授权的无状态性。使用 JWT 可以满足这种需求每次请求携带 JWT 即可实现认证和授权。自包含:JWT 包含了认证和授权信息以及其他自定义的声明这些信息都被编码在 JWT 中在服务端解码后使用。JWT 的自包含性减少了对服务端资源的依赖并提供了统一的安全机制。扩展性:JWT 可以被扩展和定制可以按照需求添加自定义的声明和数据灵活性更高。总结来说使用 JWT相较于传统的基于会话的认证机制可以减少服务器存储开销和管理复杂性实现跨域支持和水平扩展并且更适应无状态和微服务架构。
3.JWT 使用
在 Java 中可以借助 JWT 框架辅助来使用 JWT例如 hutool 框架它的介绍:
https://doc.hutool.cn/pages/IWTUtil/
全局变量
/*** 全局变量类*/
public class AppVariable {/** JWT 私钥 */public static final String JWT_KEY blog-spring-cloud-jwt;/** 登录的用户 Token key */public static final String TOKEN_KEY Authorization;
}JWT 创建
MapString, Object payload new HashMapString, Object() {private static final long serialVersionUID 1L;{put(uid, userinfo.getUid());put(manager, userinfo.getManager());// JWT 过期时间为 15 天put(exp, System.currentTimeMillis() 1000 * 60 * 60 * 24 * 15);}
};
String token JWTUtil.createToken(payload, AppVariable.JWT_KEY.getBytes());JWT的应用token放在返回信息中
HashMapString, Object result new HashMap() {{put(token, token);put(uid, userinfo.getUid());put(username, userinfo.getUsername());put(manager, userinfo.getManager());
}};
return AjaxResult.success(result);JWT验证
result JWTUtil.verify(token, AppVariable.JWT_KEY.getBytes());4.JWT 原理
JWT 的本质是:秘钥存放在服务器端并通过某种加密手段进行加密和验证的机制。加密签名某加密算法(headerpayload服务器端私钥)