參考文檔:https://segmentfault.com/a/1190000009494020
github地址:https://github.com/auth0/node-jsonwebtoken
用法
jwt.sign(payload, secretOrPrivateKey, [options, callback])
(異步)如果提供回調(diào),則使用err或JWT 調(diào)用回調(diào)。
(同步)將JsonWebToken返回為字符串他匪。
payload必須是一個object, buffer或者string洁仗。請注意, exp只有當payload是object字面量時才可以設(shè)置与帆。
secretOrPrivateKey 是包含HMAC算法的密鑰或RSA和ECDSA的PEM編碼私鑰的string或buffer聘鳞。
options:
? ? ? ?algorithm:加密算法(默認值:HS256)
? ? ? ?expiresIn:以秒表示或描述時間跨度zeit / ms的字符串诡宗。如60,"2 days"瞳步,"10h"闷哆,"7d",Expiration time单起,過期時間
? ? ? ?notBefore:以秒表示或描述時間跨度zeit / ms的字符串抱怔。如:60,"2days"馏臭,"10h"野蝇,"7d"
? ? ? ?audience:Audience,觀眾
? ? ? ?issuer:Issuer括儒,發(fā)行者
? ? ? ?jwtid:JWT ID
? ? ? ?subject:Subject绕沈,主題
? ? ? ?noTimestamp
? ? ? ?header
如果payload不是buffer或string,它將被強制轉(zhuǎn)換為使用的字符串JSON.stringify()帮寻。
在expiresIn乍狐,notBefore,audience固逗,subject浅蚪,issuer沒有默認值時。也可以直接在payload中用exp烫罩,nbf惜傲,aud,sub和iss分別表示贝攒,但是你不能在這兩個地方同時設(shè)置盗誊。
請記住exp,nbf,iat是NumericDate類型哈踱。
生成的jwts通常會包含一個iat值除非指定了noTimestamp荒适。如果iat插入payload中,則將使用它來代替實際的時間戳來計算其他事情开镣,諸如options.expiresIn給定一個exp這樣的時間間隔刀诬。
小栗子:
Token Expiration(exp claim)
小栗子:
注意:secret是加密的字符串,在反加密的時候需要用到邪财。
以上方式實現(xiàn)的效果是一樣的陕壹。
jwt.verify(token,secretOrPublicKey卧蜓,[options帐要,callback])
驗證token的合法性
jwt.decode(token [,options])
(同步)返回解碼沒有驗證簽名是否有效的payload弥奸。
警告:這不會驗證簽名是否有效榨惠。你應(yīng)該不為不可信的消息使用此。你最有可能要使用jwt.verify()盛霎。
錯誤與代碼
TokenExpiredError
如果令牌過期赠橙,則拋出錯誤。
錯誤對象:
? ? name:'TokenExpiredError'
? ? message:'jwt expired'
? ? ?expiredAt:[ExpDate]
JsonWebTokenError
錯誤對象:
? ?name:'JsonWebTokenError'
? ?message:
? ?jwt異常
? ?jwt簽名是必需的
? ?無效簽名
? ? jwt觀眾無效 預(yù)期:[OPTIONS AUDIENCE]
? ? jwt發(fā)行人無效愤炸。預(yù)期:[OPTIONS ISSUER]
? ? jwt id無效期揪。預(yù)期:[OPTIONS JWT ID]
? ? jwt主題無效。預(yù)期:[OPTIONS SUBJECT]
使用jsonwebtoken加密和解密的栗子:
使用jsonwebtoken驗證token是否過期: