aardio 文档

Remote HTTP OAuth

autos.mcp.oauth 0.1.0 是独立的桌面公共客户端授权模块;协议传输由 autos.mcp 处理,当前核心支持 2025-11-25 与 2026-07-28,默认使用前者。授权与传输代际分开,不增加 Autos 全局工具、全局 worker 或 GitHub 特例。

能力与边界

不支持 confidential client / clientSecret、Device Code、client_credentials、私钥 JWT、自动撤销、账户管理平台、并发刷新调度。一个存储名只由一个活动 OAuth 实例使用;不要跨线程传递实例或同时用多个实例刷新同一存储名。

Autos 默认身份与中立构造函数

最小登录窗口

Autos 可使用以下入口;只需将 endpoint 换为已信任的真实服务地址,不要填介绍网页。服务不支持 CIMD 时,按其要求提供预注册 clientId 或显式启用 DCR。

import win.ui;
import autos.mcp;
import autos.mcp.oauth.login;

var auth,err = autos.mcp.createOAuth({
    url = "https://mcp.example.com/mcp";
    // clientId = "YOUR_REGISTERED_PUBLIC_CLIENT_ID"; // 已有预注册身份时优先
    // scope = "read:user"; // 按实际服务与用户任务设置最小权限
    // redirectPort 默认为 0,无需固定端口
}, "MyRemoteService");

if(!auth) return null,err;
var loginForm = autos.mcp.oauth.login(auth);
loginForm.show();
win.loopMessage();

构造和显示窗口都不自动授权。用户单击“开始授权”才开始;等待期间“重新打开浏览器”和“取消”可用。取消后可在同一窗口重新开始。关闭窗口会先取消当前操作,再释放回调监听。

原生回环回调使用默认动态端口,静态元数据不需随之变化。回环 IP 和路径仍须与注册信息一致;自定义产品身份应使用自己的 CIMD 文档。DCR 仅在 allowDynamicRegistration=true 时注册,不主动向未知服务创建客户端。

与现有 session 组合

完成授权后,在同一上下文中创建 resolver,不必修改 MCP 核心:

import autos.mcp.session;

var mcp = autos.mcp.session(function(options){
    return auth.getConfig(options); // 配置含令牌,不要打印
});

var tools,err,detail = mcp.listTools();
// 使用实际服务器提供并经审核的工具。
mcp.close();
auth.close();

重启后用完全相同的配置与存储名重新构造 auth,getConfig() 会读取 DPAPI。若没有有效凭据,返回 authorization_required,调用者应显式显示登录窗口。

若已有未经授权的 MCP 请求返回 detail.wwwAuthenticate,传入 authorize({challenge=detail.wwwAuthenticate}) 或登录窗口的第 3 个参数。不要重放那次业务调用;授权后是否再次调用由业务层决定。

信任来源与安全回调

初始 endpoint 的 origin 来自本机配置。新发现的其他 origin 默认拒绝继续,返回 trust_required,不会静默请求该地址。登录窗口会显示来源并请求用户确认;可信本机代码也可显式提供 trustedOrigins=["https://auth.example.com"] 或 confirmOrigin(origin,purpose)。

trustedOrigins 是 origin 数组,不能带路径或查询;不要根据服务返回数据直接把所有地址加入白名单。这是本机显式信任策略,不是 DNS 重绑定沙箱。只连接可信服务;不支持无需用户确认的任意来源抓取。

openBrowser(url) 是给本机集成/测试的可选回调:必须启动浏览器后立即返回,不要在回调内等待登录结束。默认使用系统浏览器。URL 含敏感 state/PKCE 参数,不得送给模型、写日志或回传聊天。onStatus(state) 只收到安全状态名。shouldStop() 可用于取消。

授权服务器、回调和 HTTP 错误只输出有界错误类型/状态,不输出原始 OAuth 正文、令牌、授权码或 error_description。

凭据生命周期

Playground 两类验收不能混淆

网站 HTML 说明页提供 POST /api/auth/token:可签发 30 分钟测试 Bearer 令牌,再访问 mcp-auth-server?rev=2025-11-25。已经实际验证无令牌 401、签发、带令牌初始化、列工具和调用 get_user。

这覆盖认证后的业务小闭环,不能替代 authorization_code + PKCE + redirect + refresh_token 的 OAuth 验收。网站的 .md 摘要缺少签发接口,不能仅看摘要就断言 Auth 服务只能测 401。

规范依据

Markdown 格式