# titbit-token **Repository Path**: daoio/titbit-token ## Basic Information - **Project Name**: titbit-token - **Description**: web服务的token签发和验证。可通用于任何服务中,也可以使用mid接口生成titbit框架的中间件。 - **Primary Language**: Unknown - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2020-12-02 - **Last Updated**: 2025-11-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## titbit-token 用于进行token会话验证的处理。通过make生成token,verify验证token是否有效。 ### 安装 ``` npm i titbit-token ``` 如何使用: ``` JavaScript const titbit = require('titbit') const titok = require('titbit-token') let tk = new titok({ //验证失败时,返回的状态码,默认是401 failedCode: 400 }) const app = new titbit({ debug: true }) app.addService('token', tk) //32位密钥,长度和加密位数有关。 tk.setKey('1234567890abcdefghijklmnopqrstuv') app.addService('tok', tk) app.use(tk, {group: 'token'}) app.post('/login', async c => { //进行登录验证 //... let userinfo = { //.... } let token = c.service.token.make(userinfo) //最后返回登录成功后的token c.send(token) }) //其他路由都属于需要验证的token分组。 app.get('/user', async c => { //... }, {group: 'token'}) app.run(1234) ``` 这个示例是放在一个程序文件中的完整使用过程。你应该把验证过程放在独立的中间件模块中,让其自动进行token验证。 ### 初始化以及token的生成和验证 ```javascript const titok = require('titbit-token') let tok = new titok({ //算法,默认值aes-256-gcm //其他可选:aes-192-gcm, aes-256-cbc, sm4-cbc alg: 'aes-256-gcm', //表示有效期的秒数 expires: 3600, //加解密的密钥,长度32。 key : 'qazxswedcfvrgthynujmkiolpr5tf765', //初始向量值,用于和最开始的数据块进行运算,长度16,GCM类算法是12。 //这个仅仅用于测试,实际要使用随机向量。 iv : 'qawsedrftgyhujie', }) let data = { id : '1001', name : 'world' } let tokenstr = tok.make(data) let dedata = tok.verify(tokenstr) console.log(tokenstr, dedata) ``` make一定要对键值对形式的数据进行处理并使用JSON.stringify进行序列化,不能传递其他类型的数据。 verify的返回值是一个对象,属性ok表示是否成功,如果ok为false,则errcode是一个单词描述的状态码信息,并且是大写的。 如果ok为true,则data是解密后的数据,同时存在now属性是获取的当前时间戳,后续处理不必再次调用Date.now()获取。主要目的是用于根据时间判断是否自动更新token的情况。 ### 添加自定义的ID以及Key、IV make支持第二个参数是token id。使用token id可以进行比较精确的控制,多个应用签发的token可以有不同的token id。要启用此功能,则需要先调用addTokenId添加要识别的应用Id。 要让不同的id具有不同的key和iv,则可以使用setIdKeyIv。 ```javascript const titok = require('titbit-token') let tok = new titok() //支持参数是stirng或array,最终都是转换成array,然后循环添加。 tok.addTokenId(['test', 'app1', 'app2']) //参数:id、key、iv //一旦设置了此值,make生成token的时候,如果 tok.setIdKeyIv('app1', 'qazxswedcfvrgthynujmkiolp0987654', 'qawsedrftgyhujik') ``` ### 自定key、iv、id作为参数 ```javascript const titok = require('titbit-token') let tok = new titok() let ikv = { key : 'qazxswedcfvrgthynujmkiolp0987654', iv : 'qawsedrftgyhujik', id : 'app1' } let data = { id : '1001', name : 'unixx' } let token = tok.makeikv(data, ikv) let dedata = tok.verifyikv(token, ikv) console.log(token, dedata) ``` ### 随机生成iv并生成token ```javascript const titok = require('titbit-token') let tok = new titok() let data = { id : '1001', name : 'unixx' } let t = tok.randIvToken(data) //返回值t包括token、iv、id、key。 let dedata = tok.verifyikv(t.token, t) console.log( t, dedata ) ``` ### 生成随机IV的token ```javascript //返回值: [IV].[TOKEN] TitbitToken.prototype.makeAccessToken(info, id=null, key=null) ``` **验证** ```javascript //返回值和verify一致 TitbitToken.prototype.verifyAccessToken(info) ```