PRODUCT SPACE

CoDelphi ⌁ gzhanlei/codelphi · main ↗

CoDelphi 把 GitHub 仓库变成一份可追溯的产品规格。 连接仓库后,AI 自动提取功能清单与用户场景,每次 push 自动总结行为变化——每一条结论都附带可点击的源码证据,而不是凭空生成的摘要。

最近一次分析:succeeded

分析完整性:部分完整——合并完整性部分(合并层有截断/冲突/护栏检出);核验部分(存在一致性冲突或影子对比不一致)。分析成功不等于完整,完整不等于正确;结论采纳前应经人工核实。

源码装配覆盖率(按文件字节)12.7%(已装配实现文件 196/492 个,6 趟提取);本规格未覆盖全部实现面(提取趟数触顶),未覆盖部分不产生结论。。运行时开关与数据依赖行为静态提取不可见(边界说明);发现缺口请在左侧功能树进入功能页,用「编辑/新增场景」人工补充并标记核实。

MCP OAuth 自动发现与动态客户端注册

为 ChatGPT/Claude 网页连接器提供 OAuth 自动发现:RFC 8414 授权服务器元数据与 RFC 9728 受保护资源元数据(根路径与路径插入式两条推导),RFC 7591 动态客户端注册;授权页要求已注册 client 且回跳地址精确匹配,token 端点支持授权码与 refresh_token 旋转(access 1 小时、refresh 30 天顺延),MCP 端点 401 指向资源元数据。

代码生成稳定链接 mcp oauth 自动发现与动态客户端注册
未核实
实现分布 · 9 个文件
边界情况EC-1生成未核实
情境
未携带凭据访问 MCP 端点
操作
POST /api/mcp
结果
返回 401,WWW-Authenticate 为 Bearer 且 resource_metadata 指向 /.well-known/oauth-protected-resource/api/mcp
边界情况EC-10生成未核实
情境
授权码已交换过、verifier 错误、回跳地址或 client 不匹配
操作
POST /api/mcp/oauth/token 以 authorization_code 换取令牌
结果
返回 400 invalid_grant
边界情况EC-11生成未核实
情境
注册请求的 redirect_uris 缺失、非 http(s)、格式非法、为空或超过 5 条
操作
POST /api/mcp/oauth/register
结果
返回 400 invalid_redirect_uri,不注册客户端
边界情况EC-12生成未核实
情境
授权页缺少 client_id、redirect_uri、code_challenge 或 method 非 S256
操作
GET 授权页
结果
返回 400 缺少 PKCE 参数
边界情况EC-13生成未核实
情境
授权请求缺少 client_id、redirect_uri 或 code_challenge,或 code_challenge_method 非 S256
操作
GET /api/mcp/oauth/authorize
结果
返回 400「缺少 PKCE 参数」
边界情况EC-14生成未核实
情境
token 请求未携带 client_id
操作
POST /api/mcp/oauth/token
结果
返回 400 invalid_request
边界情况EC-3生成未核实
情境
refresh token 已被旋转重放、过期、已撤销、30 天未使用或 client 不匹配
操作
POST /api/mcp/oauth/token 以 refresh_token 授权类型刷新
结果
返回 400 invalid_grant
边界情况EC-4生成未核实
情境
授权请求的 client_id 未注册或 redirect_uri 与注册值不完全一致
操作
GET 或 POST /api/mcp/oauth/authorize
结果
返回 400 client 校验失败,不签发授权码
边界情况EC-6生成未核实
情境
注册请求的 client_name 为空白
操作
POST /api/mcp/oauth/register
结果
返回 400 invalid_client_metadata,不写入客户端
边界情况EC-9生成未核实
情境
client_id 未注册或回跳地址与注册值不精确匹配
操作
访问授权页或提交批准
结果
返回 400 client 校验失败,不签发授权码
错误路径ER-10生成未核实
情境
client_id 未注册或回跳地址与注册值不精确匹配
操作
GET 或 POST /api/mcp/oauth/authorize
结果
返回 400 client 校验失败(未注册或回跳地址不匹配)
错误路径ER-11生成未核实
情境
token 请求缺少 client_id 或授权码参数
操作
POST /api/mcp/oauth/token
结果
返回 400 invalid_request
错误路径ER-13生成未核实
情境
token 请求的 grant_type 不是 authorization_code 或 refresh_token
操作
POST /api/mcp/oauth/token
结果
返回 400 unsupported_grant_type
错误路径ER-14生成未核实
情境
注册请求 redirect_uris 缺失、超过 5 个、非 http(s) 或格式非法
操作
POST /api/mcp/oauth/register
结果
返回 400 invalid_redirect_uri,不写入客户端
错误路径ER-18生成未核实
情境
token 请求缺少 client_id、缺少授权码参数或授权类型不受支持
操作
POST /api/mcp/oauth/token
结果
返回 400 invalid_request 或 unsupported_grant_type
错误路径ER-20生成未核实
情境
token 端点收到 authorization_code 与 refresh_token 之外的 grant_type
操作
POST /api/mcp/oauth/token
结果
返回 400 unsupported_grant_type
错误路径ER-5生成未核实
情境
注册请求 client_name 为空白或 body 不是合法 JSON
操作
POST /api/mcp/oauth/register
结果
返回 400 invalid_client_metadata
正常路径HP-1生成未核实
情境
连接器读取受保护资源元数据
操作
GET /.well-known/oauth-protected-resource 或 /.well-known/oauth-protected-resource/api/mcp
结果
两条路径返回相同元数据(resource、authorization_servers、scopes_supported、resource_documentation),带 access-control-allow-origin: * 与 5 分钟缓存
正常路径HP-10生成未核实
情境
用户已登录且 client 已注册、回跳地址匹配
操作
在授权页批准
结果
签发绑定 client_id 的一次性授权码并回跳
正常路径HP-11生成未核实
情境
连接器持有有效授权码与 code_verifier
操作
POST /api/mcp/oauth/token(grant_type=authorization_code)
结果
返回 access_token、token_type=Bearer、expires_in 与 refresh_token
正常路径HP-12生成未核实
情境
access token 过期但 refresh token 有效
操作
POST /api/mcp/oauth/token(grant_type=refresh_token)
结果
返回新的 access_token 与旋转后的 refresh_token
正常路径HP-13生成未核实
情境
连接器读取受保护资源元数据
操作
GET /.well-known/oauth-protected-resource 或 /.well-known/oauth-protected-resource/api/mcp
结果
两条路径返回相同元数据:resource 为站点 /api/mcp、authorization_servers 为站点 origin、scopes_supported 为 mcp:read,带 CORS 与 5 分钟缓存
正常路径HP-15生成未核实
情境
用户已登录且 client 已注册、回跳地址匹配
操作
在授权页批准
结果
生成绑定该 client 的一次性授权码并回跳
正常路径HP-16生成未核实
情境
已持有有效 refresh_token
操作
POST /api/mcp/oauth/token 以 grant_type=refresh_token 提交
结果
返回新的 access_token(1 小时)与旋转后的 refresh_token(30 天顺延)
正常路径HP-17生成未核实
情境
未认证请求访问 MCP 端点
操作
POST /api/mcp
结果
返回 401,WWW-Authenticate 指向 /.well-known/oauth-protected-resource/api/mcp
正常路径HP-19生成未核实
情境
连接器启动连接需要注册客户端
操作
POST /api/mcp/oauth/register 提交 client_name 与 redirect_uris
结果
返回 201 与一次性 client_id、client_name、redirect_uris
正常路径HP-20生成未核实
情境
已注册客户端发起授权且用户已登录
操作
GET 授权页并批准
结果
展示注册应用名与回跳地址,批准后带授权码回跳
正常路径HP-21生成未核实
情境
已持有授权码与 PKCE verifier
操作
POST /api/mcp/oauth/token 以 authorization_code 换取令牌
结果
返回 access_token、token_type、expires_in 与 refresh_token
正常路径HP-22生成未核实
情境
access token 过期且持有 refresh token
操作
POST /api/mcp/oauth/token 以 refresh_token 换取令牌
结果
返回新的 access_token 与旋转后的 refresh_token,refresh 有效期顺延
正常路径HP-25生成未核实
情境
连接器启动连接需要注册客户端
操作
POST /api/mcp/oauth/register 携带 client_name 与 redirect_uris
结果
返回 201 与 client_id、client_id_issued_at、client_name、redirect_uris
正常路径HP-27生成未核实
情境
已持有授权码与 refresh token
操作
POST /api/mcp/oauth/token 分别以 authorization_code 或 refresh_token 授权类型换取
结果
返回 access_token、token_type、expires_in 与旋转后的 refresh_token
正常路径HP-31生成未核实
情境
access token 过期但持有有效 refresh token
操作
以 grant_type=refresh_token 调用 token 端点
结果
返回新的 access_token 与旋转后的 refresh_token,refresh 有效期顺延
正常路径HP-5生成未核实
情境
持有授权码与 code_verifier
操作
POST /api/mcp/oauth/token 以 authorization_code 授权类型换取 token
结果
返回 access_token、token_type、expires_in 与 refresh_token,授权码一次性失效
正常路径HP-6生成未核实
情境
access token 过期但 refresh token 有效
操作
POST /api/mcp/oauth/token 以 refresh_token 授权类型刷新
结果
返回新的 access_token 与旋转后的 refresh_token,refresh 有效期顺延 30 天