Daemon 认证与令牌
区分本机默认授权、共享 bearer、临时令牌和渠道独立认证。
This page has not been translated into English yet. The original Chinese version is shown below.
同一个 daemon bearer 授予持有者相同的 API 权限。它不是每客户端身份,也不能靠 X-Qwen-Client-Id 把共享 bearer 变成互不信任用户之间的隔离机制。
令牌选择
--token 优先于 QWEN_SERVER_TOKEN,取选定值后去除首尾空白。普通 loopback 启动不自动生成令牌;非 loopback 在两个来源都未提供时,会生成 128 位、22 个 URL 安全字符的临时 bearer,并在启动时打印一次,重启轮换。
显式空 --token 不回退到环境变量:普通 loopback 会进入无 token 的可信本机模式,require-auth 下拒绝;非 loopback 也拒绝启动。自动生成依据 hostname 的写法判断,指向 loopback 的普通 DNS 名仍可能触发生成,不能仅靠域名最终解析结果推断令牌生命周期。
| 启动模式 | 普通 API | /health |
|---|---|---|
| 默认 loopback、无 token | 本机访问者具有 operator 权限 | 无需 bearer |
| 普通 loopback、配置 token | 需要 bearer | 仍可预认证访问 |
| loopback 加 require-auth | 必须有 token,所有普通 API 验证 | 需要 bearer |
| 非 loopback | 配置或生成 bearer | 需要 bearer |
--require-auth 不关闭 Web Shell 文档和静态资源的预认证入口;去掉这些界面用 --no-web。渠道 Webhook 始终使用自己的 x-qwen-webhook-secret,不改用 daemon bearer。
可重复连接的配置
export QWEN_SERVER_TOKEN="$(openssl rand -hex 32)"
qwen serve --require-authcurl -H "Authorization: Bearer $QWEN_SERVER_TOKEN" \
http://127.0.0.1:4170/capabilities没有认证的客户端不能先读取 capabilities 来探测 require-auth;先处理 401,认证成功后再检查 features 中的 require_auth。缺少 header、方案错误、token 错误统一返回 401。自动生成的 token 不会替你设置 QWEN_SERVER_TOKEN,外部客户端需使用实际打印值。
open-with-auth
qwen serve --require-auth --open-with-auth此模式默认关闭,仅用于 loopback,并要求 Web Shell 已启用且构建资源存在。它复用配置令牌;所选令牌去空白后为空时,由 CLI 生成进程生命周期内的 256 位 bearer,再打开含 #token= fragment 的浏览器地址。
Web Shell 删除 fragment,把 token 保存在该 tab 的 sessionStorage;刷新可继续,关闭 tab 或重启会失去这条便捷连接。无法自动打开浏览器的 CI、SSH 等环境会打印手动地址,该地址包含秘密。生成值不持久化,也不提供跨 tab、渠道 CLI 或其他客户端自动发现机制。多客户端需配置共同的稳定 token。
QR、轮换与认证来源
非 loopback 启动可打印带 token 的二维码;稳定 operator token 在非交互 stdout 中默认不再次放入 QR,可用 --token-qr 明确开启。--no-token-qr 覆盖该次启动的 quickstart QR,但不隐藏生成 token 的独立文本行,也不控制 Local Control 配对 QR。
serve.tokenQr 只从 user、system、system-defaults 层读取,CLI 优先。二维码和终端截屏都可能包含完整 daemon 权限。稳定 token 轮换后重启服务,并更新所有客户端;它不是可单独吊销某个客户端的凭据。
模型服务认证与 daemon bearer 分开。远程 device-flow 接口只返回验证码和 URL,由客户端决定在哪里打开浏览器。官方 qwen-oauth 示例保留的是历史协议标识,不是新配置的推荐提供商;实际模型认证见登录与认证。