您的位置:首页 > 其它

Token存储方式JWT

2017-12-03 21:48 127 查看
JWT全称
json web token
,是一种基于JSON的开放标准(RFC 7519)协议,适用场景比如现在流行的分布式环境当中,非常适用跨平台应用程序。

比较

传统的
Session
是保存在服务器当中,或者内存数据库。

JWT
保存的则是在客户端中。

结构

JWT
由3个部分组成,用
.
分隔

* Header

* Payload

* Signature

JWT
通常看起来像下面一样

xxxxx.yyyyy.zzzzz


Header

第一部分是请求头由两部分组成,
alg
typ
,第一个指定的是算法,第二指定的是类型。

例如:

{
"alg": "HS256",
"typ": "JWT"
}


Payload

第二部分是主体信息组成,用来存储
JWT
基本信息,或者是我们的信息。

例如:

{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}


Signature

第三部分主要是给第一部分跟第二部进行签名使用的,用来验证是否是我们服务器发起的
Token
secret是我们的密钥。

下面例子使用
HMAC SHA256
算法进行签名

HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)


真正的
JWT
看起来像下面例子一样

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIiLCJpYXQiOjE1MTIyOTg4MDZ9.76mzRRk8CQfusjwxUMnIrME5ITyAPnNMdieJZhzaMc8


JWT工作原理



JWT SDK库支持

.NET

Python

Node.js

Java

JavaScript

Perl

Ruby

Elixir

Go

Haskell

Rust

Lua

Scala

D

Clojure

Objective-C

Swift

C

kdb+/Q

Delphi

PHP

Crystal

1C

JWT 主要依靠签名核心,也可自实现签名验证,主体信息存放。

评估

传统Cookie
Session


优点:有成熟的存储方案,
Session
存储中使用最多的方案。

缺点:分布式环境中,会话一致是痛点。

JWT

优点:分布式环境。

缺点:运算,不易控制攻击的
Token


虽然它们两个各有缺点,但只要把他们优点相互使用上,基本就是一个成熟稳定的解决方案了。

Node.js 例子

mkdir jwt
cd jwt
npm init
npm install jsonwebtoken --save


cat index.js

var jwt = require('jsonwebtoken');
var token = jwt.sign({foo:'bar'}, 'lake');
console.log(token)


官方已经提供很全的语言 例子

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  jwt session token