当前位置: 首页 > news >正文

网站设计小技巧wordpress上传大图

网站设计小技巧,wordpress上传大图,深圳互联网,做设计有必要买素材网站会员目录 JWT (JSON Web Token)1. JWT简介(1) 什么是JWT(2) JWT有什么用(3) JWT认证方式 2. JWT的组成部分3. 签名的目的4. JWT与Token的区别5 JWT的优势6 JJWT签发与验证token(1) 引入依赖(2) 创建 Token(3) 解析Token(4) 设置过期时间(5) 自定义claims 7. JWT自定义工具类 JWT (J… 目录 JWT (JSON Web Token)1. JWT简介(1) 什么是JWT(2) JWT有什么用(3) JWT认证方式 2. JWT的组成部分3. 签名的目的4. JWT与Token的区别5 JWT的优势6 JJWT签发与验证token(1) 引入依赖(2) 创建 Token(3) 解析Token(4) 设置过期时间(5) 自定义claims 7. JWT自定义工具类 JWT (JSON Web Token) 1. JWT简介 (1) 什么是JWT JWT是一种基于 Token 的认证授权机制. JWT JSON Web Token 是目前最流行的跨域认证解决方案是一种基于 Token 的认证授权机制。从 JWT 的全称可以看出JWT 本身也是 Token一种规范化之后的 JSON 结构的 Token。 (2) JWT有什么用 JWT最常见的场景就是授权认证,用户登录之后,后续的每个请求都将包含JWT, 系统在每次处理用户请求之前,都要先进行JWT的安全校验,通过校验之后才能进行接下来的操作。 (3) JWT认证方式 JWT通过数字签名的方式,以JSON对象为载体,在用户和服务器之间传递安全可靠的信息. 首先前端通过Web表单将自己的用户名和密码发送到后端的接口。这一过程一般是一个HTTP POST请求。建议的方式是通过SSL加密的传输https协议从而避免敏感信息被嗅探。后端核对用户名和密码成功后将用户的id等其他信息作为JWT Payload负载将其与头部分别进行Base64编码拼接后签名形成一个JWT(Token)。形成的JWT就是一个形同lll.zzz.xxx的字符串。 token head.payload.singurater后端将JWT字符串作为登录成功的返回结果返回给前端。前端可以将返回的结果保存在localStorage或sessionStorage上退出登录时前端删除保存的JWT即可。前端在每次请求时将JWT放入HTTP Header中的Authorization位。(解决XSS和XSRF问题) HEADER后端检查是否存在如存在验证JWT的有效性。例如检查签名是否正确检查Token是否过期检查Token的接收方是否是自己可选。验证通过后后端使用JWT中包含的用户信息进行其他逻辑操作返回相应结果。 2. JWT的组成部分 头部Header 描述 JWT 的元数据定义了生成签名的算法以及 Token 的类型。 {typ:JWT,alg:HS256}//typType令牌类型也就是 JWT。//algAlgorithm 签名算法比如 HS256。JWT签名算法中一般有两个选择一个采用HS256,另外一个就是采用RS256 进行BASE64编码https://base64.us/编码后的字符串如下eyJhbGciOiJIUzI1NiJ9 载荷payload 载荷就是存放有效信息的地方。这个名字像是特指飞机上承载的货品这些有效信息包含三个部分 {sub:1234567890,name:John Doe,admin:true}将上面的JSON数据进行base64编码得到Jwt第二部分: eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9 字段说明,下面的字段都是由 JWT的标准所定义的 iss: jwt签发者sub: jwt所面向的用户aud: 接收jwt的一方exp: jwt的过期时间这个过期时间必须要大于签发时间nbf: 定义在什么时间之前该jwt都是不可用的.iat: jwt的签发时间jti: jwt的唯一身份标识主要用来作为一次性token。签名signature 服务器通过 Payload、Header 和一个密钥(Secret) 使用 Header 里面指定的签名算法默认是 HMAC SHA256生成。 Signature 部分是对前两部分的签名作用是防止 Token主要是 payload 被篡改。 这个签名的生成需要用到 Header Payload。存放在服务端的密钥(一定不要泄露出去)。签名算法。 例如如果要使用HMAC SHA256算法则将通过以下方式创建签名 String encodeString base64UrlEncode(header) . base64UrlEncode(payload);String secret HMACSHA256(encodeString,secret);签名用于验证消息在此过程中没有更改并且对于使用私钥进行签名的令牌它还可以验证JWT的发送者是它所说的真实身份。 注意secret是保存在服务器端的jwt的签发生成也是在服务器端的secret就是用来进行jwt的签发和jwt的验证所以它就是你服务端的私钥在任何场景都不应该流露出去。一旦客户端得知这个secret, 那就意味着客户端是可以自我签发jwt了。 3. 签名的目的 最后一步签名的过程实际上是对头部以及载荷内容进行签名。 一般而言加密算法对于不同的输入产生的输出总是不一样的。对于两个不同的输入产生同样的输出的概率极其地小有可能比我成世界首富的概率还小。所以我们就把“不一样的输入产生不一样的输出”当做必然事件来看待吧。 所以如果有人对头部以及载荷的内容解码之后进行修改再进行编码的话那么新的头部和载荷的签名和之前的签名就将是不一样的。而且如果不知道服务器加密的时候用的密钥的话得出来的签名也一定会是不一样的。 服务器应用在接受到JWT后会首先对头部和载荷的内容用同一算法再次签名。那么服务器应用是怎么知道我们用的是哪一种算法呢别忘了我们在JWT的头部中已经用** alg字段指明了我们的加密算法了。 如果服务器应用对头部和载荷再次以同样方法签名之后发现自己计算出来的签名和接受到的签名不一样那么就说明这个Token的内容被别人动过的我们应该拒绝这个Token返回一个HTTP 401 Unauthorized响应。 4. JWT与Token的区别 Token 和 JWT (JSON Web Token) 都是用来在客户端和服务器之间传递身份验证信息的一种方式。但是它们之间有一些区别。 Token 是一个通用术词可以指代任何用来表示身份的字符串。它可以是任何形式的字符串并不一定是 JWT。JWT 是一种特殊的 Token它是一个 JSON 对象被编码成字符串并使用秘密密钥进行签名。JWT 可以用来在身份提供者和服务提供者之间安全地传递身份信息因为它可以被加密并且只有拥有秘密密钥的方能解密。 总的来说JWT 是一种特殊的 Token它具有更强的安全性和可靠性。 5 JWT的优势 简洁(Compact): 可以通过URLPOST参数或者在HTTP header发送因为数据量小传输速度也很快自包含(Self-contained)负载中包含了所有用户所需要的信息避免了多次查询数据库因为Token是以JSON加密的形式保存在客户端的所以JWT是跨语言的原则上任何web形式都支持不需要在服务端保存会话信息特别适用于分布式微服务。 6 JJWT签发与验证token 使用jjwt实现jwt的签发和解析获取payload中的数据. JJWT是一个提供端到端的JWT创建和验证的Java库。永远免费和开源(Apache License版本2.0)。 官方文档https://github.com/jwtk/jjwt (1) 引入依赖 !--jwt依赖--dependencygroupIdio.jsonwebtoken/groupIdartifactIdjjwt/artifactIdversion0.9.1/version/dependency(2) 创建 Token SpringBootTestclass SpringsecurityExampleApplicationTests {Testvoid contextLoads() {}Testpublic void testJJWT(){JwtBuilder builder Jwts.builder().setId(9527) //设置唯一ID.setSubject(hejiayun_community) //设置主体.setIssuedAt(new Date()) //设置签约时间.signWith(SignatureAlgorithm.HS256, mashibing);//设置签名 使用HS256算法,并设置SecretKey//压缩成String形式,签名的JWT称为JWSString jws builder.compact();System.out.println(jws);/*** eyJhbGciOiJIUzI1NiJ9.* eyJqdGkiOiI5NTI3Iiwic3ViIjoiaGVqaWF5dW5fY29tbXVuaXR5IiwiaWF0IjoxNjgxMTM1ODY2fQ.* ybkDJLVj1Fsi8m3agyxtyd0wxv7lHDqCWNOLN-eOxC8*/}}运行打印结果 eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI5NTI3Iiwic3ViIjoiaGVqaWF5dW5fY29tbXVuaXR5IiwiaWF0IjoxNjgxMTM1ODY2fQ.ybkDJLVj1Fsi8m3agyxtyd0wxv7lHDqCWNOLN-eOxC(3) 解析Token 我们刚才已经创建了token 在web应用中这个操作是由服务端进行然后发给客户端客户端在下次向服务端发送请求时需要携带这个token这就好像是拿着一张门票一样那服务端接到这个token 应该解析出token中的信息例如用户id,根据这些信息查询数据库返回相应的结果。 解析JJWS的方法如下 使用该 Jwts.parser()方法创建 JwtParserBuilder实例。setSigningKey() 与builder中签名方法signWith()对应parser中的此方法拥有与signWith()方法相同的三种参数形式用于设置JWT的签名key用户后面对JWT进行解析。最后parseClaimsJws(String)用您的jws调用该方法生成原始的JWS。如果解析或签名验证失败则整个调用将包装在try / catch块中。 Testpublic void parserJWT(){String JWS eyJhbGciOiJIUzI1NiJ9. eyJqdGkiOiI5NTI3Iiwic3ViIjoiaGVqaWF5dW5fY29tbXVuaXR5IiwiaWF0IjoxNjgxMTM1ODY2fQ. ybkDJLVj1Fsi8m3agyxtyd0wxv7lHDqCWNOLN-eOxC8;//claims 载荷 (payload)try {Claims claims Jwts.parser().setSigningKey(mashibing).parseClaimsJws(JWS).getBody();System.out.println(claims);} catch (Exception e) {System.out.println(Token验证失败! !);e.printStackTrace();}}运行打印结果 {jti9527, subhejiayun_community, iat1681135866}iat: jwt的签发时间jti: jwt的唯一身份标识主要用来作为一次性token。sub: jwt所面向的用户(4) 设置过期时间 有很多时候我们并不希望签发的token是永久生效的所以我们可以为token添加一个过期时间。 创建token 并设置过期时间 Testpublic void testJJWT2(){long currentTimeMillis System.currentTimeMillis();Date expTime new Date(currentTimeMillis);JwtBuilder builder Jwts.builder().setId(9527) //设置唯一ID.setSubject(hejiayun_community) //设置主体.setIssuedAt(new Date()) //设置签约时间.setExpiration(expTime) //设置过期时间.signWith(SignatureAlgorithm.HS256, mashibing);//设置签名 使用HS256算法,并设置SecretKey//压缩成String形式,签名的JWT称为JWSString jws builder.compact();System.out.println(jws);/*** eyJhbGciOiJIUzI1NiJ9.* eyJqdGkiOiI5NTI3Iiwic3ViIjoiaGVqaWF5dW5fY29tbXVuaXR5IiwiaWF0IjoxNjgxMTM3MjI0LCJleHAiOjE2ODExMzcyMjR9.* evc01MRxLjpbksbMLdVPM9sJGYGhpC3UYOfm4-0sMGE */}解析TOKEN 打印效果 异常信息: JWT签名与本地计算的签名不匹配。JWT有效性不能断言也不应该被信任Token验证失败! !io.jsonwebtoken.MalformedJwtException: JWT strings must contain exactly 2 period characters. Found: (5) 自定义claims 我们刚才的例子只是存储了id和subject两个信息如果你想存储更多的信息例如角色可以定义自定义claims。 创建测试类并设置测试方法 Testpublic void testJJWT3(){long currentTimeMillis System.currentTimeMillis()100000000L;Date expTime new Date(currentTimeMillis);JwtBuilder builder Jwts.builder().setId(9527) //设置唯一ID.setSubject(hejiayun_community) //设置主体.setIssuedAt(new Date()) //设置签约时间.setExpiration(expTime) //设置过期时间.claim(roles,admin) //设置角色.signWith(SignatureAlgorithm.HS256, mashibing);//设置签名 使用HS256算法,并设置SecretKey//压缩成String形式,签名的JWT称为JWSString jws builder.compact();System.out.println(jws);/*** eyJhbGciOiJIUzI1NiJ9.* eyJqdGkiOiI5NTI3Iiwic3ViIjoiaGVqaWF5dW5fY29tbXVuaXR5IiwiaWF0IjoxNjgxMTM3MjI0LCJleHAiOjE2ODExMzcyMjR9.* evc01MRxLjpbksbMLdVPM9sJGYGhpC3UYOfm4-0sMGE*/}解析TOKEN,打印结果 {jti9527, subhejiayun_community, iat1681137464, exp1681237464, rolesadmin}7. JWT自定义工具类 /*** JWT工具类*/ public class JwtUtil {//有效期为public static final Long JWT_TTL 60 * 60 *1000L;// 60 * 60 *1000 一个小时//设置秘钥明文public static final String JWT_KEY pan;public static String getUUID(){String token UUID.randomUUID().toString().replaceAll(-, );return token;}/*** 生成jtw* param subject token中要存放的数据json格式* return*/public static String createJWT(String subject) {JwtBuilder builder getJwtBuilder(subject, null, getUUID());// 设置过期时间return builder.compact();}/*** 生成jtw* param subject token中要存放的数据json格式* param ttlMillis token超时时间* return*/public static String createJWT(String subject, Long ttlMillis) {JwtBuilder builder getJwtBuilder(subject, ttlMillis, getUUID());// 设置过期时间return builder.compact();}private static JwtBuilder getJwtBuilder(String subject, Long ttlMillis, String uuid) {SignatureAlgorithm signatureAlgorithm SignatureAlgorithm.HS256;SecretKey secretKey generalKey();long nowMillis System.currentTimeMillis();Date now new Date(nowMillis);if(ttlMillisnull){ttlMillisJwtUtil.JWT_TTL;}long expMillis nowMillis ttlMillis;Date expDate new Date(expMillis);return Jwts.builder().setId(uuid) //唯一的ID.setSubject(subject) // 主题 可以是JSON数据.setIssuer(sg) // 签发者.setIssuedAt(now) // 签发时间.signWith(signatureAlgorithm, secretKey) //使用HS256对称加密算法签名, 第二个参数为秘钥.setExpiration(expDate);}/*** 创建token* param id* param subject* param ttlMillis* return*/public static String createJWT(String id, String subject, Long ttlMillis) {JwtBuilder builder getJwtBuilder(subject, ttlMillis, id);// 设置过期时间return builder.compact();}public static void main(String[] args) throws Exception {String token eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiJjYWM2ZDVhZi1mNjVlLTQ0MDAtYjcxMi0zYWEwOGIyOTIwYjQiLCJzdWIiOiJzZyIsImlzcyI6InNnIiwiaWF0IjoxNjM4MTA2NzEyLCJleHAiOjE2MzgxMTAzMTJ9.JVsSbkP94wuczb4QryQbAke3ysBDIL5ou8fWsbt_ebg;Claims claims parseJWT(token);System.out.println(claims);}/*** 生成加密后的秘钥 secretKey* return*/public static SecretKey generalKey() {byte[] encodedKey Base64.getDecoder().decode(JwtUtil.JWT_KEY);SecretKey key new SecretKeySpec(encodedKey, 0, encodedKey.length, AES);return key;}/*** 解析** param jwt* return* throws Exception*/public static Claims parseJWT(String jwt) throws Exception {SecretKey secretKey generalKey();return Jwts.parser().setSigningKey(secretKey).parseClaimsJws(jwt).getBody();}}
http://www.yayakq.cn/news/5545/

相关文章:

  • 网站引导页是什么网站建设找扌金手指排名
  • flash+xml网站模板大都会app下载二维码
  • 泾川县建设局网站舒城县建设局网站首页
  • 网站设计模板连城县住房和城乡建设局 网站
  • 网站建设范围微商商城系统开发
  • 做自动发货网站台州关键词排名优化
  • seo培训网的优点是seo推广任务小结
  • 医疗保健网站前置审批文件局域网建站软件
  • 网站建设目的功能wordpress 导航图片尺寸
  • 昌邑网站建设公司广州 环保 凡人网站建设
  • 程序员做网站美工能过关吗树莓派搭建wordpress
  • 开一个免费网站手机怎样做网站
  • 秦都区建设局网站音响网站模板免费下载
  • 网站汉英结合的怎么做竞价如何屏蔽恶意点击
  • 扫二维码做自己网站wordpress下单邮件通知的实现
  • 南昌建设厅网站网站首页背景图片
  • 重庆网站建设 渝网站开发程序介绍
  • h5是什么网站上面做的适合个人做外贸的网站
  • 做餐饮培训网站广告2345电脑版
  • 淘宝做基础销量怎么网站汕头seo不错
  • 建设进出口外贸网站最新国际热点新闻事件
  • 网站备案在线注销江苏省建设工程信息一体化平台
  • 深圳网站建设力荐上榜网络个体可以做企业网站吗
  • 黄冈网站建设哪家好手机网站模板 psd
  • 家里电脑做网站服务器网站建设首页需要哪些元素
  • 做网站现在什么最赚钱吗网站 免费空间
  • 湖北省建设工程人力资源网站建设网站需要做什么
  • 轻松建站wordpress gonzo
  • 快速收录网站内页自己做下载网站吗
  • 高大上网站wordpress 2.6