Origin 应用只用 Ed25519 签 JWT
Origin 应用文档写明只接受 Ed25519 签名密钥。App JWT 的 iss 和 kid 都要填应用 ID,aud 为 origin-apps,建议寿命约五分钟。一个应用最多十把处于启用状态的签名密钥,私钥不要提交进仓库。

origin app jwt 签名在 Origin 文档里被限定成一种算法。Build an Origin App 写:只接受 Ed25519。生成密钥对的示例是 openssl genpkey -algorithm ED25519,再用 openssl pkey -pubout 导出公钥。把公钥 PEM 填进应用的 signing key。RSA 或其他曲线,这页没有给出接受的写法。
头和声明里有两个字段必须等于应用 ID
App JWT 参考给的 JOSE 头是 alg 为 EdDSA,typ 为 JWT,kid 为应用 ID。声明里 iss 也是这个应用 ID,aud 为 origin-apps,再加上 iat 和 exp。文档写:把 iss 和 kid 都设成应用 ID,寿命大约五分钟。应用 ID 在应用页面上,前缀是 app_。
请求头是 Authorization: Bearer 后面接这枚 App JWT。它用于应用级操作:读应用元数据、管理 installation、签发 installation token、补发 webhook。它不拿来代替仓库级的 oit_ 令牌去改 pull request。两枚凭据的分工在安装令牌那一页,不在这枚 JWT 的声明里混用。
文档示例里的时间戳是说明格式,不是你该抄的过期时间。exp 要比签发时刻晚大约五分钟。签得更长时,后面铸出的安装令牌也不会比这枚 JWT 活得更久,那是安装令牌页的限制,不是这页允许你把 App JWT 签成一天。
公钥最多十把,私钥不要进仓库
同一页写:一个应用最多持有 10 把处于启用状态的签名密钥。轮换时先加新公钥,确认新 JWT 能用,再停用旧的。10 这个上限针对的是启用中的钥匙,文档没有写已停用的钥匙是否仍占名额。
创建应用和添加公钥是在 Origin 的应用设置里做的。文档写明,安装应用的人必须是 workspace admin。安装 ID 前缀是 i_,出现在安装页 URL /codebase/settings/apps/installations/{installationId} 里。应用在发布前保持私有,这和密钥能不能用是两件事:私钥在本地,公钥在 Origin,市场名单还没有你,JWT 仍然可以按文档去签。
写作日没有运行 openssl,也没有向 api.cursor.com 送过 JWT。密钥文件名沿用文档示例 origin-app-private.pem 即可,不要把私钥提交进要给 Agent 读的仓库。Origin 仓库的基本概念见 Cursor Origin 是什么。