登录与访问
AI 客户端通过 OAuth 2.1 登录 LetKite。每个客户端你只需批准一次,选择它可以做什么、能访问哪些机器,并且可以随时收回这些权限。
发现
客户端不带令牌调用 https://mcp.letkite.com/mcp 时,会收到 HTTP 401,其中的 WWW-Authenticate 头指向受保护资源元数据。客户端由此找到授权服务器:
| 受保护资源元数据 | https://mcp.letkite.com/.well-known/oauth-protected-resource/mcp |
|---|---|
| 授权服务器元数据 | https://mcp.letkite.com/.well-known/oauth-authorization-server(也可在 /.well-known/openid-configuration 获取) |
| 签发者 | https://mcp.letkite.com |
| 授权端点 | https://mcp.letkite.com/oauth/authorize |
| 令牌端点 | https://mcp.letkite.com/oauth/token |
| 吊销端点 | https://mcp.letkite.com/oauth/revoke(用于刷新令牌) |
| 注册端点 | https://mcp.letkite.com/oauth/register |
客户端注册
LetKite 没有预先注册的客户端。客户端通过以下两种方式之一表明身份:
- 动态客户端注册(RFC 7591):客户端把自己的元数据提交到注册端点,获得客户端 ID。只有请求
client_secret_post或client_secret_basic的客户端才会获得客户端密钥;公共客户端不使用密钥。 - 客户端 ID 元数据文档:客户端 ID 是一个提供该客户端元数据的
https://地址。LetKite 获取它时超时为 5 秒,最多 64 KB,不跟随重定向,并且只从公网地址获取。
重定向 URI 必须使用 https;Claude Code 等本地客户端也可以使用 http,但须指向环回地址(localhost、127.0.0.1),端口不限(RFC 8252)。LetKite 能识别 Claude、ChatGPT 等已知客户端的回调地址;如果某个客户端的回调地址不在其中,登录页面会提醒你。被拒绝的回调地址会记录在审计日志中。
授权流程
- 只支持授权码流程(
response_type=code),每个请求都必须使用 PKCES256。 - 资源指示符(RFC 8707):客户端可以把
https://mcp.letkite.com/mcp指定为资源;令牌始终为它签发。 - 授权响应带有
iss(RFC 9207)。 - 授权类型:
authorization_code和refresh_token。
你批准的内容
登录在 LetKite 自己的登录页面(id.letkite.com)上进行,账户要求时还需两步验证。如果你属于多个 LetKite 账户,需要选择其中一个。随后授权页面会显示:
- 客户端的名称、注册方式,以及它会把你送回的地址;
- 它请求的权限范围,你可以取消勾选(至少保留一项);
- 它能访问的机器:所有机器(包括之后添加的),或只限带有指定标签或 ID 的机器;
- 限制它的策略,从你账户的策略中选择。
批准后,会为这个人、这个客户端、这组权限范围、这组机器和这个策略创建一个连接(即一项授权)。账户的所有者和你都会收到关于新连接的邮件,邮件中附有链接,如果不是你本人操作,可以用它撤销。
权限范围
| 权限范围 | 允许 | 工具(示例) |
|---|---|---|
fleet.read | 列出机器、读取文件、查看日志和后台任务状态 | list_hosts、host_facts、read_file、list_dir、job_status、log_read |
fleet.exec | 执行命令、打开 shell 和终端、启动后台任务和定时任务、唤醒机器 | exec、shell_run、job_start、terminal_open、schedule_create |
fleet.write | 写入、上传、复制和删除文件 | write_file、delete_path、transfer_start |
fleet.admin | 端口转发和读取审计日志;包含其他三项 | tunnel_open、tunnel_http、audit_tail |
offline_access | 接受;但无论是否请求,都会签发刷新令牌 |
每个工具需要的权限范围写在工具页面的工具说明中。缺少权限范围的调用会失败,并返回 token lacks fleet.…。
令牌
| 访问令牌 | 15 分钟,签名的 JWT(RS256),面向 https://mcp.letkite.com/mcp,以 Authorization: Bearer 发送 |
|---|---|
| 刷新令牌 | 30 天,每次使用后轮换;再次使用旧令牌会吊销整条令牌链 |
| 授权码 | 2 分钟,一次性;被重放的授权码会使由它签发的令牌被吊销 |
收回权限
- 在控制台的连接页面(https://dashboard.letkite.com/connections)断开你的任意连接。所有者和管理员可以断开任何人的连接。
- 使用新连接邮件中的链接。
LetKite 在每次工具调用时都会重新读取连接,因此被断开的客户端会在几秒内被拒绝,无需等待它的令牌过期。如果一个连接的所有刷新令牌都已过期满一天,它会被自动移除,除非有定时任务在使用它。