| title | Cloudflare Access 身份认证 |
|---|---|
| description | 为 Sink 仪表盘启用可选的 Zero Trust 登录,同时保持短链接公开、API 客户端可用。 |
Cloudflare Access 是可选功能。适合希望用公司身份(Google、邮箱 OTP、SSO 等)登录仪表盘,而不是只靠分享 NUXT_SITE_TOKEN 的场景。
此集成只适用于 Sink 的单用户模式。配置 OIDC 后会进入独立的多用户模式,此时受保护的 API 只接受 OIDC Session,不再使用 Cloudflare Access 身份或站点令牌。
无论是否启用 Access,短链接都保持公开。Access 只影响谁能打开仪表盘、谁能调用 API。
| 路径 | 未启用 Access | 推荐的 Access 配置 |
|---|---|---|
短链接(/abc) |
公开 | 仍然公开 |
仪表盘(/dashboard) |
知道站点令牌即可 | 先通过 Cloudflare Access,再使用仪表盘 |
API(/api/**) |
站点令牌(Bearer …) |
站点令牌 或 有效的 Access 登录(浏览器 Cookie / JWT) |
API 文档(/_docs) |
在你的域名上公开 | 仍公开;若不想公开,需在 Access 中单独保护 |
Sink 不会因为「有 Cookie」就放行。它会校验 Access JWT — 可以把它想成一张有时效的电子通行证(会检查签名、签发者、受众和过期时间)。
目标:用 Access 保护仪表盘,短链接保持公开,脚本/扩展仍可用站点令牌调用 /api。
在 Cloudflare Zero Trust 中,为 Sink 域名(例如 links.example.com)创建一个 Self-hosted Access 应用。
在 Access 应用的路径规则中:
| 路径 | 是否用 Access 保护 | 原因 |
|---|---|---|
/dashboard 及其子路径 |
是 | 管理后台 |
/api |
否(推荐) | 让脚本、扩展仍可用站点令牌调 API,不必再过 Access |
| 短链接路径 | 否 | 访客必须能直接打开短链 |
/_docs |
可选 | 只有不想公开 OpenAPI 时才保护 |
在 Access 应用设置中,保持 Cookie Path 为空/未限制,这样浏览器从仪表盘调用 /api 时,已签名的 Access Cookie 才能带上。
如果 Cookie Path 只限 /dashboard,可能出现:仪表盘能打开,但 API 一直 401。
两个值都要填。同时设置后才会启用 Access:
NUXT_CF_ACCESS_TEAM_DOMAIN=https://your-team.cloudflareaccess.com
NUXT_CF_ACCESS_AUD=paste-application-aud-here| 变量 | 从哪里拿 |
|---|---|
NUXT_CF_ACCESS_TEAM_DOMAIN |
Zero Trust 团队域名。用完整源地址、不要带路径:https://<team>.cloudflareaccess.com |
NUXT_CF_ACCESS_AUD |
Access 应用 → Application Audience (AUD) Tag |
设置后重新部署。
启用 Access 后,仍要设置高强度的 NUXT_SITE_TOKEN:
- API 客户端和集成仍会用它
- 它是备用管理凭据
- 任何能打到这个 Worker/Pages 的域名,只要边缘没拦,仍可能接受站点令牌
浏览器 → Access 登录页 → 仪表盘
↘ Access Cookie/JWT → Sink 校验通过 → /api 可用
脚本/扩展 → Authorization: Bearer <NUXT_SITE_TOKEN> → /api 可用- 人(浏览器): 先过 Access,再正常使用仪表盘。退出登录走 Cloudflare(
/cdn-cgi/access/logout)。 - 工具(API): 发送
Authorization: Bearer YOUR_SITE_TOKEN。自动化优先用这种方式。 - Access 服务令牌: 若 Access 策略允许,Sink 会把它当作完整管理员(
root)。只允许受信任的服务令牌。
你也可以把 /dashboard 和 /api 都放进 Access。
这样未通过 Access 的请求会在 Cloudflare 边缘被拦下,到不了 Sink。只带站点令牌、不过 Access 的客户端,将无法调用该域名。
如果既要:
- 人用 Access 登录仪表盘,又要
- 自动化只靠 Bearer 令牌、不过 Access,
请用上面的推荐配置,或给自动化单独准备一个不走 Access 的域名。
::: warning 保护每一个域名
如果 app.example.com 开了 Access,但 old.example.com 也指向同一套 Sink 且没开 Access,旧域名的安全性仍只取决于 NUXT_SITE_TOKEN。所有能访问应用的域名都要保护。
:::
::: tip 会话时长仍然重要 Sink 在本地校验 JWT。你在 Access 里撤销会话后,旧 JWT 在过期前仍可能可用。请按风险选择合适的 Access 会话时长。 :::