# RFC:BuildIt! 身份认证 ~~这都什么神奇设计,怎么minzhengbu就只是个套皮KV呢。我还以为民政部是IdP或者IdM呢。。。~~ 我希望为每个用户添加一个 API 令牌(token)。为了简化实现,每个用户只有一个令牌。 https://github.com/AOSC-Dev/buildit/pull/42 ## 目标 - 安全:只有 BuildIt! 服务端可以生成和重置令牌,且新令牌难以被预测。 - 身份认证:令牌代表 BuildIt! 对用户身份的认证,断言令牌持有者代表某一用户。 - 可吊销:BuildIt! 服务端可吊销任何已签发的令牌。~~JWT说是~~ - 便于存储和交换:令牌以适当长度的 ASCII 文本呈现,便于复制和存储。~~我可不想拖着个 X.509 PEM 到处走~~ ## 格式 `aoscbldit1_[UID]_[KEY]` 其中,`aoscbldit1` 表示 "AOSC BuildIt! (token version 1)",`[UID]` 为十进制的 31 位无符号用户 ID,`[KEY]` 为服务端生成的 64 位随机字符串,包含 `[A-Za-z0-9]` 且区分大小写。 该格式可通过正则表达式匹配: ```regex aoscbldit1_(?'uid'[1-9][0-9]{1,9})_(?'key'[A-Za-z0-9]{64}) ``` ## 令牌管理 向 Telegram 机器人添加指令: - `/token`:获取当前令牌 - `/resettoken`:重置令牌 ## HTTP API ~~求求你们不要再把全部东西塞一个crate里面了,这编译单元也太大了吧,OC还要塞个Matrix支持进去,那还得加一堆E2EE依赖,我去~~ 使用 Bearer authorization。 添加新的 API 端点: - `/api/user/self`:提供用户基本信息 为以下 API 端点添加鉴权: - `/api/pipeline/new` - `/api/pipeline/new_pr` - ~~`/api/job/restart`~~(前端使用)