cjwt
Version:
Casstime jwt middleware
84 lines (60 loc) • 1.87 kB
Markdown
cjwt
====
## 简介
约定jwt payload 默认有sub和ctx属性。
sub标识请求从何而来,可以为用户或服务。ctx标识以谁的名义请求。
以下payload表示该请求来自内部test服务,请求xm的相关资源。
```
{
"sub": "service:test",
"ctx": {
"username": "xm"
}
}
```
## 安装
```
npm install cjwt --save
```
## 使用
```
const CJWT = require('cjwt');
const cjwt = new CJWT(options);
app.use(cjwt.middleware());
app.use((req, res, next) => {
const cjwt = req.cjwt;
// cjwt.sub
// cjwt.iss
// cjwt.issuer
// cjwt.subject.type
// cjwt.subject.id
// cjwt.isService 是否为服务调用
// cjwt.subjectType 调用类型
...
});
cjwt.sign('service', 'cjwt', {username: 'test'})
.then(console.log);
```
## middleware
使用中间件后会将payload添加到req.cjwt对象中,
payload的值可以通过两种方式取:
req.cjwt.iss === req.cjwt.issuer
同时,可以使用req.cjwt.sign,req.cjwt.verify,req.cjwt.decode等方法
注意,req.cjwt.subject被解析成对象含有type和id两个属性
而req.cjwt.sub直接返回payload中的sub属性
req.cjwt.sub // 'service:test'
req.cjwt.subject.type // 'service'
req.cjwt.subject.id // 'test'
## options
- options.secret: String|Function,可以直接给字符串,或者返回Promise的函数
```
const secret = (payload) => {
const code = getSecretCode();
const salt = payload.username;
return Promise.resolve(code + salt);
}
```
- options.signOptions: Object 生成签名时附加选项
参考 [jsonwebtoken](https://github.com/auth0/node-jsonwebtoken#jwtsignpayload-secretorprivatekey-options-callback)
- options.verifyOptions: Object 校验签名时附加选项
参考 [jsonwebtoken](https://github.com/auth0/node-jsonwebtoken#jwtverifytoken-secretorpublickey-options-callback)