JWT主要由三部分组成(什么是token机制?)

前言小编一直使用的是服务器的session,最近的项目,小编做成了前后端分离,遇到了一些问题:前后端项目分属于两个域名,如果要使用session,则需要解决跨域问题如果接口存在多个服务器的话,session小编就不建议使用了所以这时候,

前言

小编一直使用的是服务器的session,最近的项目,小编做成了前后端分离,遇到了一些问题:

  1. 前后端项目分属于两个域名,如果要使用session,则需要解决跨域问题
  2. 如果接口存在多个服务器的话,session小编就不建议使用了

所以这时候,小编就想到了使用token,来验证用户的合法性。

Token和session的区别

  1. 跨域问题:token没有跨域问题,session有跨域问题;
  2. 容易扩展:token不储存于服务器中,适用于服务器的分布式应用;
  3. CSRF:不依赖与cookie,不会受到跨站请求伪造的攻击;
  4. 性能:相对于session,少了一次sessionid的计算;

以上是小编认为Token和session之间的一些不同之处,所以小编觉得使用token比较方便。

JWT Token(JSON WEB TOKEN)

小编对于token的使用,是基于JWT的,因为这个标准也是比较主流的一种使用规范。JWT主要由三部分组成

  1. 头部(header)
  2. 载荷(payload)
  3. 签证(sign)

头部(header)

JWT的头部主要由两部分信息组成:

  1. 声明类型,这里上jwt
  2. 声明加密算法,如:HMAC、SHA256、HS256

下边的json,就是一个完整的头部信息:

{
\”typ\”: \”JWT\”,
\”alg\”: \”HS256\”
}

我们将这个头部信息使用base64加密,就得到了我们JWT的第一部分信息了:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9

载荷(payload)

主要有三部分组成:标准中注册的声明、公共的声明、私有的声明。

标准中注册的声明:

  • iss:jwt签发者
  • sub:jwt所面向的用户
  • aud:接收jwt的一方
  • exp:jwt的过期时间,这个过期时间必须大于签发时间
  • nbf:定义在什么时间之前,该token都是不可用的
  • iat:jwt的签发时间
  • jti:jwt的唯一身份标识,避免重复

自定义的声明

用户自己添加的一些信息,比如用户姓名、手机号等一些不敏感信息。

我们来看看一个完整的载荷(payload)的json数据:

{
\”iss\”: \’jwt\’
\”sub\”: \”13011912019\”,
\”exp\”: \”1530000000\”,
\”iat\”: \”1529000000\”,
\”jti\”: \”638069ab7a97771edcb91180f491d01e\”,
\”nickname\”: \”kafei\”,
\”avatar\”: \”http://oy98jbaeo.bkt.clouddn.com/avatar-1532401501\”
}

我们继续将这个载荷(payload)信息使用base64加密,就得到了我们JWT的第二部分信息了:

eyJpc3MiOiJqd3QiLCJzdWIiOiIxMzAxMTkxMjAxOSIsImV4cCI6IjE1MzAwMDAwMDAiLCJpYXQiOiIxNTI5MDAwMDAwIiwianRpIjoiNjM4MDY5YWI3YTk3NzcxZWRjYjkxMTgwZjQ5MWQwMWUiLCJuaWNrbmFtZSI6ImthZmVpIiwiYXZhdGFyIjoiaHR0cDovL295OThqYmFlby5ia3QuY2xvdWRkbi5jb20vYXZhdGFyLTE1MzI0MDE1MDEifQ

签证(sign)

前边我们已经获取到了头部信息的base64和载荷的base64的信息了,现在我们需要用这两个信息,生成一个签证(sign),这就是我们需要的第三部分信息了:

<?php
$header = \'{\”typ\”: \”JWT\”,\”alg\”: \”HS256\”}\’;
$payload= \'{\”iss\”: \”jwt\”,\”sub\”: \”13011912019\”,\”exp\”: \”1530000000\”,\”iat\”: \”1529000000\”,\”jti\”: \”638069ab7a97771edcb91180f491d01e\”,\”nickname\”: \”kafei\”,\”avatar\”: \”http://oy98jbaeo.bkt.clouddn.com/avatar-1532401501\”}\’;
// 使用.拼接,header在前,payload在后
$encodedString = base64UrlEncode($header) . \’.\’ . base64UrlEncode($payload);
// 私密字符
$salt = \’kafei\’;
// 签名
$sign= HS256($encodedString . $salt); // 这里使用随机一段字符代替 eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
// 注意,PHP小编没找到HS256的加密,都是sha256的加密,后面小编有时间的话,会去写写这个
// 网上有现成的 JWT 库,大家可以去下载看看
// PHP 的 JWT 库的 GIT 地址:https://github.com/lcobucci/jwt
?>

最后,我们将这三部分连接起来,就是我们需要的JWT了:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJqd3QiLCJzdWIiOiIxMzAxMTkxMjAxOSIsImV4cCI6IjE1MzAwMDAwMDAiLCJpYXQiOiIxNTI5MDAwMDAwIiwianRpIjoiNjM4MDY5YWI3YTk3NzcxZWRjYjkxMTgwZjQ5MWQwMWUiLCJuaWNrbmFtZSI6ImthZmVpIiwiYXZhdGFyIjoiaHR0cDovL295OThqYmFlby5ia3QuY2xvdWRkbi5jb20vYXZhdGFyLTE1MzI0MDE1MDEifQ.eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9

前端请求

将token放入到header里边的Authorization中,作为验证,如:

fetch(\’api/user/1\’, {
headers: {
\’Authorization\’: \’Bearer \’ + token
}
})

优点

  • 不需要储存在服务器的session中,更容易扩展服务器
  • 由于用户信息可以放入token中,所以可以少了一次数据库 / 缓存的查询操作,有更好的性能
  • 不需要预防CSRF的攻击

不足

  • token一经泄露或者被盗取,将会暴露该用户

建议

  • 设置token的过期时间,不宜过长
  • 非常重要的操作,需要手机验证码,支付密码等二次验证作为保险
  • 尽量使用 https

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 55@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/55259.html

(0)
nan
上一篇 2021-12-02
下一篇 2021-12-02

相关推荐

  • 自己有域名如何建站(网站申请域名和空间)

    新手如何快速搭建自己的个人博客网站作为一个博客新人,搭建这个博客花了不少力气,毕竟是第一次,所以我想到可能会有人跟我一样,在搭建博客时会遇到一些问题,所以写一篇简单的教程教大家如何搭建一个个人博客!注:此博客只为新人搭建博客做参考,大神可略过!我

    2021-11-14 创业分享
    0
  • 哪个品牌的助听器好(耳内助听器什么牌子好)

    哪个品牌的助听器好?耳内助听器什么牌子好,久久派带你了解相关信息。随着我国听力需求人群的不断增长,近些年市场上也随之涌现出了各种各样的助听器品牌,面对众多鱼龙混杂的品牌,很多朋友不知该如何选择,担心一不小心选择了不好的品牌会影响佩戴效果,于是很多朋友都会来咨询:助听器什么牌子听得清楚没有杂音呢?助听器什么牌子好,听得清楚无杂音?20年实战经验的听力师告诉你其实助听器有杂音,有可能确

    2021-12-28
    0
  • 电脑端口号怎么查看(电脑端口号怎么查看是不是开着)

    怎么查看电脑端口号?如何在系统中查看端口呢?本文给大家分享各个系统查看端口号的操作方法。解决方法:1、首先打开运行命令框,XP、Win7、Win10系统可以直接在开始菜单中找到,也可以使用Win+R组合快捷键快速打开(Win8首选方法)。

    2021-12-30
    0
  • 描写金秋的诗句古诗大全(形容金秋的诗句有哪些)

    转眼间已到秋分时节,此日昼夜等长,寒暑均半,落叶已是纷纷,漫山遍野的黄色和红色,陶醉了整个季节。秋天,如同一幅清美的画卷,令无数文人墨客在画卷上题笔写诗,留下一首首杰作。恰今日、平分秋色,十首有关秋分的诗词,在诗词里遇见最美秋日!

    2021-11-22 创业分享
    0
  • win7建立wifi热点的详细教程(win7怎么开热点给手机)

    其实用电脑设置热点的操作方法有很多种,操作也都还比较简单,接下来小编就以win7系统为例来说说笔记本设置热点的操作步骤。1.进入win7桌面,点击开始按钮,然后在搜索框中输入cmd并回车。2.在打开的命令符号符界面中输入“netsh

    2021-12-03 创业分享
    0
  • 清盘是什么意思(基金清盘是什么意思)

    基金清盘是什么意思_什么是非正常清盘基金_清盘怎么办基金清盘对于投资者来说绝对是一件很糟糕的事情,损失很大,如果大家持有规模小的基金,应密切关注,一旦符合清盘条件应该马上赎回,减少损失。那么基金清盘到底是什么意思,什么是非正常清盘基金,基金清盘,投

    2022-01-12
    0

发表回复

登录后才能评论