编程界Token的另一种最佳协议JWT

       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)

  官方提供各个语言版本 例子


猜你喜欢

转载自blog.csdn.net/qianfeng_dashuju/article/details/80135343