jsonwebtoken介绍和使用对称加密颁发验证token

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jsonwebtoken介绍和使用对称加密颁发验证token相关的知识,希望对你有一定的参考价值。

参考技术A 使用JWT生成的token由三个部分构成: header payload signature,例如:

网址: https://www.npmjs.com/package/jsonwebtoken
JSON Web令牌 的实现。
这是针对开发的 draft-ietf-oauth-json-web-token-08 。它利用了 node-jws

颁发token
(异步)如果提供了回调,则使用 err 或JWT调用该回调。
(同步)以字符串形式返回JsonWebToken

payload 可以是对象文字,缓冲区或表示有效JSON的字符串。

secretOrPrivateKey 是一个字符串,缓冲区或对象,其中包含HMAC算法的秘密或RSA和ECDSA的PEM编码的私钥。如果使用带有密码短语的私钥, key, passphrase 则可以使用一个对象(基于 加密文档 ),在这种情况下,请确保您通过了该 algorithm 选项。
options :

带有默认值的同步符号(HMAC SHA256)

使用用RSA SHA256同步签名

异步签名

回溯jwt 30秒

验证token
(异步)如果提供了回调,则函数将异步操作。如果签名有效且可选的有效期,受众或发行者有效,则使用解码后的有效负载调用回调。如果没有,它将被错误调用。

(同步)如果未提供回调,则函数将同步执行。如果签名有效且可选的有效期限,受众或发行者有效,则返回解码后的有效负载。如果没有,它将抛出错误。

token 是JsonWebToken字符串

secretOrPublicKey 是一个字符串或缓冲区,其中包含HMAC算法的机密,或包含RSA和ECDSA的PEM编码的公钥。如果 jwt.verify 称为异步,则 secretOrPublicKey 可以是应该获取秘密或公共密钥的函数。请参阅下面的详细示例

如 本注释所述 ,还有其他库期望使用base64编码的机密(使用base64编码的随机字节),如果可以的话,您可以通过 Buffer.from(secret, 'base64') 这样做,机密将使用base64进行解码,并且令牌验证将使用原始库。随机字节。

options

支持的算法数组。当前支持以下算法。

例:颁发token和验证token

JWT登录验证

Json Web Token 使用 JSON 来传递数据,用于判定用户是否登录状态

基本思想:用户id,加密算法和签名一起存储到客户端,每次请求接口时判断签名是否一致

jwt由Header,Payload及signature由.拼接而成

Header
Header 由非对称加密算法和类型组成,如下

const header = {
  // 加密算法
  alg: ‘HS256‘,
  type: ‘jwt‘
}

Payload 中由 Registered Claim 以及需要通信的数据组成。这些数据字段也叫 Claim。
Registered Claim 中比较重要的是 "exp" Claim 表示过期时间,在用户登录时会设置过期时间

const payload = {
  // 表示 jwt 创建时间
  iat: 1532135735,

  // 表示 jwt 过期时间
  exp: 1532136735,

  // 用户 id,用以通信
  user_id: 10086
}    

Sign 由 Header,Payload 以及 secretOrPrivateKey 计算而成。

对于 secretOrPrivateKey,如果加密算法采用 HMAC,则为字符串,如果采用 RSA 或者 ECDSA,则为 PrivateKey。

// 由 HMACSHA256 算法进行签名,secret 不能外泄
const sign = HMACSHA256(base64.encode(header) + ‘.‘ + base64.encode(payload), secret)

// jwt 由三部分拼接而成
const jwt = base64.encode(header) + ‘.‘ + base64.encode(payload) + ‘.‘ + sign

在生成规则中可知,jwt 前两部分是对 header 以及 payload 的 base64 编码。

当服务器收到客户端的 token 后,解析前两部分得到 header 以及 payload,并使用 header 中的算法与 secretOrPrivateKey 进行签名,判断与 jwt 中的签名是否一致。



以上是关于jsonwebtoken介绍和使用对称加密颁发验证token的主要内容,如果未能解决你的问题,请参考以下文章

SSL安全证书的实现机制

JWT登录验证

非对称加密的相关名词介绍

HTTPS原理

什么是https

Fiddler抓取HTTPS协议