javascript
jwt(json web token)简介 -凯发k8官方网
文章目录
- 一、jwt是什么
- 二、跨域认证问题
- 三、jwt原理
- 四、jwt数据结构
- 1、header(头部)
- 2、payload(负载)
- 3、signature
- 五、jwt是如何工作的
一、jwt是什么
json web token (jwt)是一个开放标准(rfc 7519),它定义了一种紧凑的、自包含的方式,用于作为json对象在各方之间安全地传输信息。该信息可以被验证和信任,因为它是数字签名的。
二、跨域认证问题
互联网服务离不开用户认证,一般流程如下:
这种模式的问题在于,扩展性(scaling)不好。单机当然没有问题,如果是服务器集群,或者是跨域的服务导向架构,就要求 session 数据共享,每台服务器都能够读取 session。
一种凯发k8官方网的解决方案是 session 数据持久化,写入数据库或别的持久层。各种服务收到请求后,都向持久层请求数据。这种方案的优点是架构清晰,缺点是工程量比较大。另外,持久层万一挂了,就会单点失败。
另一种方案是服务器索性不保存 session 数据了,所有数据都保存在客户端,每次请求都发回服务器。jwt 就是这种方案的一个代表。
三、jwt原理
jwt原理,服务器认证以后,生成一个 json 对象,发回给用户,就像下面这样
{"姓名": "张三","角色": "管理员","到期时间": "2018年7月1日0点0分" }以后,用户与服务端通信的时候,都要发回这个 json 对象。服务器完全只靠这个对象认定用户身份。为了防止用户篡改数据,服务器在生成这个对象的时候,会加上签名(详见后文)。
服务器就不保存任何 session 数据了,也就是说,服务器变成无状态了,从而比较容易实现扩展。
四、jwt数据结构
实际返回给前端jwt数据结构是这样
eyjhbgcioijiuzi1niisinr5cci6ikpxvcj9.eyjzdwiioiixmjm0nty3odkwiiwibmftzsi6i kpvag4grg9liiwiywrtaw4ionrydwv9.tjva95orm7e2cbab30rmhrhdcefxjoyzgefonfh7hg q是一个很长的字符串,中间以(.)分割。注意jwt没有换行的
jwt三部分如下:
header(头部) payload(负载) signature(签名)1、header(头部)
header典型的由两部分组成:token的类型(“jwt”)和算法名称(比如:hmac sha256或者rsa等等)。
{"alg": "hs256","typ": "jwt" }然后,用base64对这个json编码就得到jwt的第一部分
2、payload(负载)
jwt的第二部分是payload,它包含声明(要求)。声明是关于实体(通常是用户)和其他数据的声明。声明有三种类型: registered, public 和private
- registered claims : 这里有一组预定义的声明,它们不是强制的,但是推荐。比如:iss (issuer), exp (expiration time), sub (subject), aud (audience)等。
- public claims : 可以随意定义。
- private claims : 用于在同意使用它们的各方之间共享信息,并且不是注册的或公开的声明。
官方给了7个字段供选用
除了官方字段,你还可以在这个部分定义私有字段,下面就是一个例子。
{"sub": "1234567890","name": "john doe","admin": true }注意,不要在jwt的payload或header中放置敏感信息,除非它们是加密的。
3、signature
signature 部分是对前两部分的签名,防止数据篡改。
首先,需要指定一个密钥(secret)。这个密钥只有服务器才知道,不能泄露给用户。然后,使用 header 里面指定的签名算法(默认是 hmac sha256),按照下面的公式产生签名。
看一张凯发k8官方网官网的图就明白了:
五、jwt是如何工作的
在认证的时候,当用户用他们的凭证成功登录以后,一个json web token将会被返回。此后,token就是用户凭证了,你必须非常小心以防止出现安全问题。一般而言,你保存令牌的时候不应该超过你所需要它的时间。
无论何时用户想要访问受保护的路由或者资源的时候,用户代理(通常是浏览器)都应该带上jwt,典型的,通常放在authorization header中,用bearer schema。
header应该看起来是这样的:
authorization: bearer
服务器上的受保护的路由将会检查authorization header中的jwt是否有效,如果有效,则用户可以访问受保护的资源。如果jwt包含足够多的必需的数据,那么就可以减少对某些操作的数据库查询的需要,尽管可能并不总是如此。
如果token是在授权头(authorization header)中发送的,那么跨源资源共享(cors)将不会成为问题,因为它不使用cookie。
鸣谢:
http://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html https://www.cnblogs.com/cjsblog/p/9277677.html
总结
以上是凯发k8官方网为你收集整理的jwt(json web token)简介的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇:
- 下一篇: