eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImF1ZCI6IuWkqeihjOWBpeeuoeeQhueUqOaItyIsImF1ZGllbmNlIjoid2ViIiwibmJmIjoxNTA3Njg0OTQyLCJpc3MiOiJ3d3cuMW9uZS5jbiIsImV4cCI6MTUwNzY4Njc0MiwiaWF0IjoxNTA3Njg0OTQyLCJqdGkiOjEwMDB9.GGF0kFbxNk2ezzuXEJVBZyyL4e4BYMdpse73cSDrUut7cbVyYuLG1CNr8RI7eI3VHz9sdCB14Kesi8rP-v3VJA
{ "body":{ "sub":"admin", "aud":"用户", "audience":"web", "nbf":1507684942, "iss":"www.z201.cn", "exp":1507686742, "iat":1507684942, "jti":1000 }, "header":{ "typ":"JWT", "alg":"HS512" }, "signature":"GGF0kFbxNk2ezzuXEJVBZyyL4e4BYMdpse73cSDrUut7cbVyYuLG1CNr8RI7eI3VHz9sdCB14Kesi8rP-v3VJA" }
{ 'typ': 'JWT', // 'alg': 'HS512' }
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9
载荷就是存放有效信息的地方。这个名字像是特指飞机上承载的货品,这些有效信息包含三个部分git
标准中注册的声明github
公共的声明web
私有的声明算法
标准中注册的声明 (建议但不强制使用) :json
iss: jwt签发者安全
sub: jwt所面向的用户服务器
aud: 接收jwt的一方网络
exp: jwt的过时时间,这个过时时间必需要大于签发时间分布式
nbf: 定义在什么时间以前,该jwt都是不可用的.编码
iat: jwt的签发时间
jti: jwt的惟一身份标识,主要用来做为一次性token,从而回避重放攻击。
eyJzdWIiOiJhZG1pbiIsImF1ZCI6IuWkqeihjOWBpeeuoeeQhueUqOaItyIsImF1ZGllbmNlIjoid2ViIiwibmJmIjoxNTA3Njg0OTQyLCJpc3MiOiJ3d3cuMW9uZS5jbiIsImV4cCI6MTUwNzY4Njc0MiwiaWF0IjoxNTA3Njg0OTQyLCJqdGkiOjEwMDB9
而后将Body进行base64加密(该加密是能够对称解密的),构成了第二部分.
"body":{ "sub":"admin", "aud":"用户", "audience":"web", "nbf":1507684942, "iss":"www.z201.cn", "exp":1507686742, "iat":1507684942, "jti":1000 }
"signature":"GGF0kFbxNk2ezzuXEJVBZyyL4e4BYMdpse73cSDrUut7cbVyYuLG1CNr8RI7eI3VHz9sdCB14Kesi8rP-v3VJA"
这个部分须要base64加密后的header和base64加密后的body使用.链接组成的字符串,而后经过header中声明的加密方式进行加盐secret组合加密,而后就构成了jwt的第三部分。
最后将signature进行base64加密(该加密是能够对称解密的),构成了第三部分。
密钥secret是保存在服务端的,服务端会根据这个密钥进行生成token和验证,因此须要保护好。