Token存储方式JWT
2017-12-03 21:48
127 查看
JWT全称
* Header
* Payload
* Signature
Header
第一部分是请求头由两部分组成,
例如:
Payload
第二部分是主体信息组成,用来存储
例如:
Signature
第三部分主要是给第一部分跟第二部进行签名使用的,用来验证是否是我们服务器发起的
下面例子使用
真正的
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 主要依靠签名核心,也可自实现签名验证,主体信息存放。
优点:有成熟的存储方案,
缺点:分布式环境中,会话一致是痛点。
JWT
优点:分布式环境。
缺点:运算,不易控制攻击的
虽然它们两个各有缺点,但只要把他们优点相互使用上,基本就是一个成熟稳定的解决方案了。
cat index.js
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库支持
.NETPython
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 主要依靠签名核心,也可自实现签名验证,主体信息存放。
评估
传统CookieSession
优点:有成熟的存储方案,
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)
官方已经提供很全的语言 例子
相关文章推荐
- API接口JWT方式的Token认证(下),客户端(Android)的实现
- 基于JWT(Json Web Token)的ASP.NET Web API授权方式
- CAS 4.0 更改token存储方式(redis)后,产生的单点登出问题?
- 利用Redis和Jwt实现Token生成,存储,验证方法
- API接口JWT方式的Token认证(上),服务器(Laravel)的实现
- 基于JWT(Json Web Token)的授权方式
- Lumen中使用JWT-Auth刷新token实现方式
- 由顺序方式存储的完全二叉树进行重建
- HTML5 5大存储方式总结
- 存储数据:文件方式
- Map的存储方式
- android文件存储的4种方式
- hive安装过程:metastore(元数据存储)的三种方式之本地derby方式
- Android数据存储方式之文件存储详解
- Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File
- C/C++浮点数在内存中的存储方式
- iOS中常用的持久化存储方式有好几种
- 位域结构体(位字段)的存储形式(分配方式)
- 第十四天:一个map集合存储数据的登录方式!
- IOS学习之ios应用数据存储方式(归档)