(異步)若是提供回調,則使用err或JWT 調用回調。git
(同步)將JsonWebToken返回爲字符串。github
payload必須是一個object, buffer或者string。請注意, exp只有當payload是object字面量時才能夠設置。
secretOrPrivateKey 是包含HMAC算法的密鑰或RSA和ECDSA的PEM編碼私鑰的string或buffer。
options:web
algorithm:加密算法(默認值:HS256)算法
expiresIn:以秒錶示或描述時間跨度zeit / ms的字符串。如60,"2 days","10h","7d",Expiration time,過時時間json
notBefore:以秒錶示或描述時間跨度zeit / ms的字符串。如:60,"2days","10h","7d"異步
audience:Audience,觀衆async
issuer:Issuer,發行者ui
jwtid:JWT ID編碼
subject:Subject,主題加密
noTimestamp
header
若是payload不是buffer或string,它將被強制轉換爲使用的字符串JSON.stringify()。
在expiresIn,notBefore,audience,subject,issuer沒有默認值時。也能夠直接在payload中用exp,nbf,aud,sub和iss分別表示,可是你不能在這兩個地方同時設置。
請記住exp,nbf,iat是NumericDate類型。
生成的jwts一般會包含一個iat值除非指定了noTimestamp。若是iat插入payload中,則將使用它來代替實際的時間戳來計算其餘事情,諸如options.expiresIn給定一個exp這樣的時間間隔。
// sign with default (HMAC SHA256) var jwt = require('jsonwebtoken'); var token = jwt.sign({ foo: 'bar' }, 'shhhhh'); //backdate a jwt 30 seconds var older_token = jwt.sign({ foo: 'bar', iat: Math.floor(Date.now() / 1000) - 30 }, 'shhhhh'); // sign with RSA SHA256 var cert = fs.readFileSync('private.key'); // get private key var token = jwt.sign({ foo: 'bar' }, cert, { algorithm: 'RS256'}); // sign asynchronously jwt.sign({ foo: 'bar' }, cert, { algorithm: 'RS256' }, function(err, token) { console.log(token); });
簽署1小時期限的token:
jwt.sign({ exp: Math.floor(Date.now() / 1000) + (60 * 60), data: 'foobar' }, 'secret');
使用此庫生成令牌的另外一種方法是:
jwt.sign({ data: 'foobar' }, 'secret', { expiresIn: 60 * 60 }); //or even better: jwt.sign({ data: 'foobar' }, 'secret', { expiresIn: '1h' });
驗證token的合法性
(同步)返回解碼沒有驗證簽名是否有效的payload。
警告:這不會驗證簽名是否有效。你應該不爲不可信的消息使用此。你最有可能要使用jwt.verify()。
TokenExpiredError
若是令牌過時,則拋出錯誤。
錯誤對象:
name:'TokenExpiredError'
message:'jwt expired'
expiredAt:[ExpDate]
JsonWebTokenError
錯誤對象:
name:'JsonWebTokenError'
message:
jwt異常
jwt簽名是必需的
無效簽名
jwt觀衆無效 預期:[OPTIONS AUDIENCE]
jwt發行人無效。預期:[OPTIONS ISSUER]
jwt id無效。預期:[OPTIONS JWT ID]
jwt主題無效。預期:[OPTIONS SUBJECT]