OTP:一次性密码服务

npm GitHub issues Rating

为 Koishi 提供了一次性密码服务。

OTP 服务支持以下算法:

  • TOTP: 基于时间的一次性密码算法 (RFC 6238)

  • HOTP: 基于计数器的一次性密码算法 (RFC 4226)

更多算法欢迎提交 PR。

使用

安装

插件市场搜索 otp 并安装。

命令

  • otp [name]: 列出用户保存的某个或所有密码。

  • otp.add <name> <token>: 添加或覆盖认证账号。

  • otp.rm <name>: 移除令牌。

配置项

最大步长在 TOTP 算法中表示每隔多少秒更新一次密码,HOTP 算法中表示每隔多少次更新一次密码。

  • qrcode (boolean): 是否在添加令牌时显示二维码,默认值:true

  • tokenizer (randomuuidtimestamp): 公共令牌生成方式,默认值:uuid

  • maxStep (number): 最大步长,默认值:30

  • maxThreshold (number): 最大重试阈值,默认值:5

开发

安装开发依赖


npm i koishi-plugin-otp -D

# or yarn

yarn add koishi-plugin-otp -D

API

类: OTPService

可通过 ctx.otp 访问。

otp.generate(method: OTPMethod, options: OTPOptions)

  • method: 认证算法,支持 totphotp

  • options: 认证配置项,支持以下属性:

  • secret: 共享密钥。

  • algorithm: 哈希算法,支持 sha1sha256sha512

  • digits: 密码长度。

  • period: 密码更新周期。

  • step: 最大步长。

生成密码。

otp.createToken(tokenizer?: Tokenizer, salt?: string)

  • tokenizer: 密钥生成器,支持 randomuuidtimestamp

  • salt: 密钥生成器的盐。

创建共享密钥。

在 WebUI 中使用(New!)

插件目前可以在 WebUI 中使用了:

import { useOTP } from 'koishi-plugin-otp/dist'

const otp = useOTP('totp', {
secret: 'your secret',
algorithm: 'sha1',
digits: 6,
period: 30,
step: 1
});

鸣谢

  • Arily: 提供了 commands 实现与修复了一些 bug。

License

This project is licensed under the MIT license.

4 个赞

有人故意用拼写错误骗回复!

是谁呢?

我不说。

export const usign = ['otp'];
1 个赞

qsign 入脑了属于是(

1 个赞

我不是我没有!改啦!

2 个赞

好好好!支持

2 个赞

0.0.3 更新日志

Feature

  • 增加命令,目前支持以下命令:
    • otp [name]: 列出用户保存的某个或所有密码。
    • otp.add <name> <token>: 添加或覆盖认证账号。
    • otp.rm <name>: 移除令牌。
  • 增加多语言
    • zh-CN
    • en-GB

Bug Fix

  • 修复服务导出问题
  • 修复 OTP Code 返回计算错误
  • 修复 Node 环境下包导入问题

Changed

  • 重写统一插件入口
  • 重写服务子插件

[New!] 服务开发

API

类: OTPService

可通过 ctx.otp 访问。

otp.generate(method: OTPMethod, options: OTPOptions)

  • method: 认证算法,支持 totphotp
  • options: 认证配置项,支持以下属性:
    • secret: 共享密钥。
    • algorithm: 哈希算法,支持 sha1sha256sha512
    • digits: 密码长度。
    • period: 密码更新周期。
    • step: 最大步长。

生成密码。

otp.createToken(tokenizer?: Tokenizer, salt?: string)

  • tokenizer: 密钥生成器,支持 randomuuidtimestamp
  • salt: 密钥生成器的盐。

创建共享密钥。

2 个赞

0.0.4 更新日志

Bug fix

  • 修复了中文语言文件未导入的问题

Changed

  • 移动数据库注册至命令插件
1 个赞

0.0.5 更新日志

  • 重构算法
  • 支持在浏览器 (WebUI) 中使用了

浏览器 Crypto API 有一定的安全性限制,请确保浏览器支持与符合安全上下文

得益于浏览器的 Crypto API,不需要额外导入 HMAC 算法:

import { useOTP } from 'koishi-plugin-otp/dist'

const otp = useOTP('totp', {
  secret: 'your secret',
  algorithm: 'sha1',
  digits: 6,
  period: 30,
  step: 1
});
2 个赞

0.1.0-alpha.0 更新日志

这是一个破坏性更新,更新前请先删除旧版本插件。

  • 修复了算法错误
  • 修复了命令中错误的保存方式
  • 增加了二维码扫描添加方式:otp.qrcode <image>
  • 增加了令牌密钥加密保存,目前与 salt 共用一个密码。
    • 请注意:如果丢失了你的 salt,你将无法找回已保存的令牌密钥
  • 移除了数据库中不需要的字段
3 个赞