开发者
适用于 SpeakNotes API 的 OAuth 2.1
包含 PKCE 的授权码模式、刷新令牌轮换、动态客户端注册和撤销。当您的应用代表其他 SpeakNotes 用户操作时,请使用此功能。
发现
两个元数据文档都是公开的。MCP 客户端会自动从 API 返回的 401 质询中找到它们。
# Authorization server metadata (RFC 8414) curl https://speaknotes.io/.well-known/oauth-authorization-server # Protected resource metadata (RFC 9728) curl https://api.speaknotes.io/.well-known/oauth-protected-resource
流程
- 1
注册客户端
向注册端点发送 POST 请求,并附上您的重定向 URI。公共客户端使用 PKCE 且不获取密钥;机密客户端则会获取一个密钥。支持 https、回环 http 以及自定义应用方案。
curl -X POST https://api.speaknotes.io/oauth/register \ -H "Content-Type: application/json" \ -d '{ "client_name": "Your app", "redirect_uris": ["https://your.app/callback"], "token_endpoint_auth_method": "none", "scope": "notes:read notes:write summaries:write" }' - 2
发送用户进行授权
使用您的客户端 ID、重定向 URI、作用域、状态和 S256 代码质询打开授权端点。用户登录后,将看到您请求的具体作用域,并选择批准或拒绝。
https://speaknotes.io/oauth/authorize ?client_id=sn_client_... &redirect_uri=https://your.app/callback &response_type=code &scope=notes:read%20summaries:write &state=RANDOM &code_challenge=BASE64URL_SHA256_OF_VERIFIER &code_challenge_method=S256
- 3
交换代码
将代码和您的代码验证器 POST 到令牌端点。代码为一次性使用,一分钟内过期;重用代码将撤销其生成的令牌。
curl -X POST https://api.speaknotes.io/oauth/token \ -H "Content-Type: application/json" \ -d '{ "grant_type": "authorization_code", "client_id": "sn_client_...", "code": "...", "redirect_uri": "https://your.app/callback", "code_verifier": "..." }' - 4
刷新
访问令牌有效期为一小时。刷新令牌在每次使用时都会轮换,提交已撤销的令牌将导致整个授权失效,这能防止被盗令牌被滥用。
curl -X POST https://api.speaknotes.io/oauth/token \ -H "Content-Type: application/json" \ -d '{ "grant_type": "refresh_token", "client_id": "sn_client_...", "refresh_token": "sn_rt_..." }'
access_token: 1h · refresh_token: 60d, rotating · code: 60s, single use
请求作用域
仅请求您所需的最少权限。刷新操作可能会缩小作用域但绝不会扩大,用户可以在设置中查看并撤销任何应用的权限。
撤销
将任一令牌 POST 到撤销端点。撤销其中一个即会终止整个令牌对。根据 RFC 7009,撤销一个不存在的令牌仍视为成功。
curl -X POST https://api.speaknotes.io/oauth/revoke \
-H "Content-Type: application/json" \
-d '{"client_id": "sn_client_...", "token": "sn_rt_..."}'MCP 客户端
MCP 客户端无需手动执行上述步骤。它只需调用工具,获取指向资源元数据的 401 响应,注册自身,并引导用户完成相同的授权屏幕。