v1auth 上下文凭据管理
第三方身份
POST /v1/auth/credentials/provider/:provider:把第三方账号绑定为登录方式。
绑定第三方身份是把「GitHub 上的那个我」变成这个账号的一把钥匙。它与第三方登录回调是两个端点,授权模型完全不同:登录端点匿名可用,绑定端点要求会话与提权。
请求
POST /v1/auth/credentials/provider/:provider,provider 取 github 或 microsoft。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
code | string | ✅ | 提供商回调拿到的授权码,1–1024 字符 |
redirect_uri | string | ✅ | 与发起绑定时的地址完全一致 |
code_verifier | string | ✅ | PKCE 原始值,43–128 字符 |
{ "success": true, "changed": true, "credential": { "id": "cred_...", "type": "oauth", "provider": "github" } }| 字段 | 说明 |
|---|---|
changed | 本次是否真的新增了凭据;同一身份重复绑定返回 false |
credential | 绑定后的凭据对象,形状见凭据管理总览 |
code_verifier 在这里是必填
登录场景缺了它,最坏结果是登录 CSRF;绑定场景缺了它,攻击者可以把自己的授权码塞进受害者的浏览器,在受害者账号上留下一个自己完全控制的后门。 PKCE 是唯一能证明「这个授权码由发起绑定的那个浏览器产生」的东西。
行为约定
| 约定 | 说明 |
|---|---|
| 不创建账号 | 身份必须挂在当前会话的账号上 |
| 不签发票据 | 绑定不是登录,不产生访问令牌 |
| 幂等 | 同一身份已绑在本账号时返回已有凭据,changed: false |
| 审计 | 仅在 changed: true 时写入 provider.bind |
提供商目录
绑定的前置信息由两个端点提供,见凭据管理总览:
GET /v1/auth/providers:公开目录,登录页渲染按钮用;GET /v1/auth/credentials/providers:多一个linked字段,控制台「安全设置」用。