文档中心 / 开发者

批准卡

用户在 MimiKey 里看到的每一张批准卡:何时出现、显示什么、各按钮的结果、回调状态与有效期。

概览

批准卡是 MimiKey 为第三方授权渲染的决策界面。所有批准卡都运行在 MimiKey 自己的进程里(iOS App 与 Mac App),接入方无法定制其结构或按钮,只能提供品牌白名单中的名称、图标、品牌色与主页。

卡触发主按钮次按钮
同意卡authorize() / mimikey://authorize允许拒绝
选条目卡pick_item用这条不给
读取批准卡get_item(ask 策略)允许一次拒绝
安全卡(新建)create_item保存并用于本次任务不用了
修改卡update_item保存修改拒绝

出卡前的检查

MimiKey 收到深链后,按顺序检查:

  1. 账号状态。 未登录时显示「请先登录 MimiKey」卡,点「返回应用」后回调 error=not_signed_in。已登录但锁定时,先走正常解锁(面容 ID / 触控 ID / Touch ID 或主密码),解锁后继续出卡;出卡途中被锁定会收起卡片,解锁后重新出卡。
  2. 深链参数。 回调地址本身不合法时不跳转,只在 MimiKey 内提示。其他参数缺失或格式不对时,回调 error=invalid_request。
  3. client 与回调地址。 client 不存在、被开发者或平台停用,或回调地址不在登记列表中时,回调 error=invalid_request。
  4. 请求。 请求不存在或不属于当前账号时,回调 error=request_not_found。

卡片的公共结构

每张卡从上到下包含:

  • MimiKey 标识:表明这是 MimiKey 自己渲染的界面。
  • 接入方品牌块:图标(加载失败时显示名称首字母)、名称、主页域名;公开客户端在 iOS 上另有「设备内应用」标记。
  • 标题:以接入方名称开头,说明它要做什么。
  • 用途说明:接入方提供的 reason,原样显示。
  • 过期倒计时:到期时卡片自动结束,回调 status=expired。
  • 操作按钮:固定的两个按钮,语义由 MimiKey 决定。

同意卡

触发: 接入方调用 authorize(),打开 mimikey://authorize。

显示:

  • 标题:「{应用名} 请求连接你的 MimiKey」(Mac 上为「{应用名} 想接入你的 MimiKey」)。
  • 「将能做什么」四行:读取你选定的条目、请你选条目、请你在 MimiKey 里新建、请你批准修改。
  • 「授权的库」:只列出你拥有的库,个人库默认勾选;共享库的普通成员无法授权该库。
  • 「审批策略」:「每次询问」(默认)或「信任此应用」,后者旁注「读取不再逐次询问,仍需你打开 MimiKey 执行」。
  • 「审批钥指纹」:16 位十六进制。接入方 App 可以显示同一个指纹供你核对。

结果:

操作结果回调
允许生成授权码(10 分钟、单次)?mk=authorize&code=…&state=…
拒绝不生成授权?mk=authorize&error=access_denied&state=…

授权码兑换成令牌后,授权才真正生效。

选条目卡

触发: pick_item 请求。

显示:

  • 标题:「{应用名} 请你选一个条目」,以及用途说明。
  • 候选列表:来自本授权的库(或请求指定的那个库)中的全部条目,按接入方提示排序——网址同一可注册域优先,其次标题包含提示,再次类型相同。
  • 搜索框:按名称、账号或网址筛选。
  • 每行显示类型图标、标题与副标题,不显示密码。

结果:

操作结果回调 status
选中后点「用这条」本机解密该条目、密封给接入方、上传,请求完成completed
不给请求被拒绝denied

接入方另外收到一条明文回执 picked_item(id、title、url、kind),不含密码与备注。

读取批准卡

触发: get_item 请求。

ask 策略: 标题「{应用名} 想读取『{条目标题}』」,下方显示所在库与用途说明。

操作结果回调 status
允许一次批准并由本机立即执行,请求完成completed
拒绝请求被拒绝denied

trust 策略: 请求一创建即为已批准。打开 MimiKey 后由本机直接执行,卡上只闪一行「已按你的信任设置提供」,随后跳回接入方。如果打开时没有任何已解锁的设备,请求停在「已批准,等待设备执行」,直到你解锁 MimiKey 或请求过期。

提示 「信任」只免去读取的逐次批准。选条目、新建和修改在两种策略下都必须由你在卡上亲自操作。

安全卡(新建)

触发: create_item 请求。

显示:

  • 标题:「{应用名} 请你新建一条{类型}」,以及用途说明。
  • 该类型的完整编辑表单(登录、信用卡、银行卡、API 密钥、服务器、安全笔记),接入方提供的标题、网址、用户名等提示已预填,可以修改;密码由你在这里输入,接入方从不经手。
  • 「保存到」:默认是请求指定的库,也可以改选你名下的任意库;授权范围之外的库标注「授权范围外」。

结果:

操作结果回调 status
保存并用于本次任务(存入授权范围内的库)条目加密保存;保存即批准本次使用,接入方收到完整条目completed
保存并用于本次任务(存入授权范围外的库)条目照常保存,但接入方只收到回执(saved_out_of_scope),拿不到这条条目;授权范围不会因此扩大completed
不用了请求被拒绝,不保存denied

必填项为空时卡片会直接提示,不会提交。保存后的条目与你手动新建的条目在服务器上完全一样,只有密文。

修改卡

触发: update_item 请求(在接入方上传加密补丁之后)。

显示:

  • 标题:「{应用名} 想修改『{条目标题}』」,以及用途说明。
  • 「修改内容」差异表:每个被修改的字段显示「原」与「新」两行;密码类字段默认遮挡,可点「显示」/「隐藏」。
  • 当前修订号,并注明「保存后生成新修订」。

新值由接入方密封给你的账号身份公钥,只有你已解锁的设备能打开;补丁中出现请求未声明的字段时,MimiKey 会拒绝该请求。

结果:

操作结果回调 status
保存修改写入新修订;接入方只收到新修订号,不收到明文completed
拒绝请求被拒绝,不写入denied
(保存时条目已被他处修改)卡上提示「这条条目刚被别处修改,本次修改未保存」,请求以拒绝结束denied

不操作直接离开

如果你在 MimiKey 里什么都不做就切回接入方 App(在 Mac 上按 Esc 关闭卡片效果相同),MimiKey 不会发送回调,请求保持待处理直到过期。接入方的等待界面会提供「重试」(再次打开 MimiKey 回到这张卡)与「取消」两个出口。

有效期

对象有效期到期结果
授权码10 分钟,单次使用兑换失败(code_expired)
选条目、读取请求10 分钟expired
新建请求30 分钟expired
修改请求草稿(等待接入方上传补丁)60 秒expired,不会出现在你的设备上
修改请求(补丁上传后)30 分钟expired
access token1 小时接入方自动用 refresh token 续期
refresh token30 天,每次续期重新计时需要重新授权

卡片上的倒计时与服务器的过期时间一致。授权被撤销时,该授权下所有未完成的请求立即置为 expired。

回调状态汇总

场景回调参数
授权成功mk=authorize&code=…&state=…
授权被拒绝mk=authorize&error=access_denied&state=…
请求完成mk=request&request_id=…&state=…&status=completed
请求被拒绝 / 取消 / 过期mk=request&request_id=…&state=…&status=denied(或 cancelled、expired)
MimiKey 未登录error=not_signed_in
深链或 client 不合法error=invalid_request
请求不存在error=request_not_found

回调只告诉接入方「可以去取结果了」,不携带任何结果数据。

在 MimiKey 里管理授权

除了通过深链出卡,你也可以直接在 MimiKey 里处理:

  • iOS: 设置 →「第三方授权」。
  • Mac: 侧栏「第三方授权」。

这里有两部分:

  • 待处理请求:所有等待你处理的请求。点开后出现与深链相同的批准卡;处理完成后只关闭卡片,不跳转到接入方 App,接入方通过轮询拿到结果。
  • 已授权应用:每个授权的应用名、授权的库、审批策略与审批钥指纹。你可以在「每次询问」与「信任此应用」之间切换(只影响之后的新请求),或撤销授权。撤销立即生效:该应用的令牌全部失效,未完成的请求全部过期。

最后更新: 2026-10-23