OAuth 2.0 过 Casdoor,Cursor 调 LLM 凭据取 TaoToken

📅 发布时间:2026/9/18 19:30:57
OAuth 2.0 过 Casdoor,Cursor 调 LLM 凭据取 TaoToken
1. 从 Cursor 里那句 401 说起Casdoor 管的是“你是谁”TaoToken 管的是“模型怎么调”如果你正在把 Cursor 接进公司统一身份体系大概率会撞上这样一个瞬间Casdoor 这边授权码换 Token 一切正常/api/userinfo也能拿到用户信息但回到 Cursor 里一发请求模型侧直接回 401 或 403提示凭据无效。问题不在于 OAuth 配错了而在于很多人把两件事混成了一件——用户身份令牌和模型调用凭据。Casdoor 签发的是前者它回答“这个登录的人是谁、属于哪个组织”真正让 Cursor 把请求打到模型服务上的是后者也就是你在 TaoToken 控制台创建的 API Key。把这两条链路拆开看整套集成其实非常短Casdoor 作为 OAuth 2.0 授权服务器负责应用访问的登录与令牌签发TaoToken 负责模型侧的统一入口与 Key 管理。注册、拿 Key、看用量都在 TaoToken 官网 的控制台完成模型 Base URL 统一填https://taotoken.net/apiKey 占位符写成YOUR_API_KEY。这篇文章按一个 OAuth 集成开发者的视角往下走先在 Casdoor 建 OAuth 应用拿到 Client ID / Secret 和授权 URL再用授权码换 Token看清返回值里每个字段最后把 TaoToken 的 Key 与 Base URL 落到 Cursor 的模型凭据里附上 Claude Code 的settings.json、Codex 的config.toml以及 CC Switch 三件套的可复制配置。全程可跟做报错也一起排。2. 在 Casdoor 建 OAuth 应用授权 URL 怎么拼、回调怎么配Casdoor 本身已经不只是一个登录页它把用户、组织、应用、身份源、权限策略放进同一套可视化管理台。对本次任务来说你只需要用到它的 OAuth 2.0 授权服务器能力把 Cursor 相关的业务应用注册成一个 Client。进入 Casdoor 后台后大致是这么几步用管理员账号登录第一件事是把内置默认密码改掉别留到联调结束。进入「应用」列表新增一个应用名称用英文小写加连字符比如cursor-llm-gateway。在应用详情里记录两个值Client ID与Client Secret。Secret 只放后端或本地环境变量不要进前端、不要进 Git。在「重定向 URL」里精确登记回调地址多个回调可以一行一个。本地联调常见的是http://localhost:3000/oauth/callback如果是 Cursor 这类桌面客户端的本地回调按客户端实际监听的端口填写路径和端口必须一字不差否则会在授权阶段被拒绝。授权类型勾选 Authorization Code。需要刷新令牌的话同时开启 Refresh Token。保存之后授权入口的 URL 结构就确定了。Casdoor 的授权端点通常挂在/login/oauth/authorize下可复制的 URL 形如https://你的-casdoor-域名/login/oauth/authorize ?client_idCLIENT_ID response_typecode redirect_urihttp%3A%2F%2Flocalhost%3A3000%2Foauth%2Fcallback scopeopenid%20profile%20email state随机字符串几个容易翻车的点先标出来redirect_uri必须做 URL 编码且要和后台登记的完全一致state不能省它是防 CSRF 的关键scope里至少带openid否则拿不到标准 OIDC 的用户信息端点。想快速核对端点是否齐全可以直接拉 OIDC 发现文档curl -s https://你的-casdoor-域名/.well-known/openid-configuration | jq .authorization_endpoint, .token_endpoint, .userinfo_endpoint返回的三个地址就是后面两步要用的。把授权 URL 丢进浏览器页面会跳到 Casdoor 的登录门户完成账号密码、MFA 或第三方身份源登录后浏览器会被重定向回你登记的redirect_uri地址栏里多出一个code参数——这就是授权码。此时先别急着换 Token。授权码是短时效、一次性的拿到就尽快换同时在心里默念一遍本文的核心边界这个码换回来的是“人”的身份令牌不是模型调用凭据。这一点在后面配 Cursor 时非常关键。3. 授权码换 Token一次完整的 curl 复现与返回值对照第二步在后端做用授权码换 Access Token。Casdoor 的 Token 端点是/api/login/oauth/access_token标准authorization_code流程curl -X POST https://你的-casdoor-域名/api/login/oauth/access_token \ -H Content-Type: application/x-www-form-urlencoded \ -d grant_typeauthorization_code \ -d client_idCLIENT_ID \ -d client_secretCLIENT_SECRET \ -d code上一步拿到的一次性授权码 \ -d redirect_urihttp://localhost:3000/oauth/callback成功时返回的 JSON 结构大致如下字段名以实际返回为准{ access_token: eyJhbGciOi..., token_type: Bearer, expires_in: 7200, refresh_token: eyJhbGciOi..., id_token: eyJhbGciOi..., scope: openid profile email }逐个字段对照一下用途避免误用access_token调用 Casdoor 受保护接口的凭据放Authorization: Bearer token头里。它是身份层面的凭证。token_type固定为Bearer拼请求头时不要写成Basic。expires_in秒数通常两小时上下。业务侧要按这个值做提前刷新不要等 401 再补救。refresh_tokenAccess Token 过期后换新令牌用。如果 Casdoor 应用里没开 Refresh Token这个字段就不会出现。id_tokenOIDC 的身份断言做前端免登或拿用户基本信息时用不要拿它去调模型。scope本次授权实际生效的范围和后端权限判断对齐。拿着access_token验证一下身份链路是否打通curl -s https://你的-casdoor-域名/api/userinfo \ -H Authorization: Bearer access_token | jq {name, email, owner}能正常返回用户名、邮箱、所属组织说明 Casdoor 这条链路已经闭环。到这里OAuth 2.0 授权服务器保护应用访问的目标达成。接下来是最容易被忽略的一步把这个身份结果映射到模型侧的调用凭据上。4. 从身份令牌到模型凭据TaoToken Key 与 Base URL 的落位很多人卡住的原因是默认“OAuth 换来的 Token 应该能直接调模型”。实际上模型服务需要的是它自己认可的一把 KeyCasdoor 的access_token对它没有意义。正确做法是两步走Casdoor 确认这个人是谁、能不能进这个应用TaoToken 负责这个人或这个团队能在模型侧消耗多少。所以第三步是去 TaoToken 官网 完成注册并进控制台创建 API Key。建议按人、按项目分配独立 Key别全组共用一把否则用量无法归因离职回收也麻烦。创建完成后你会拿到一串 Key 值本文统一用占位符YOUR_API_KEY表示。模型侧的固定写死两项Base URL: https://taotoken.net/api API Key : YOUR_API_KEY注意https://taotoken.net/api这个 Base URL 是工具配置项不带任何查询参数。部分客户端在内部会自己拼接路径如果它强制要求/v1把 Base URL 写成https://taotoken.net/api/v1再试一次即可两种写法在不同工具里的兼容情况不一样实测为准。把两条链路并排放在一起对应关系就清楚了环节承担方产物用途用户登录与授权Casdooraccess_token/id_token判断“谁在访问应用”模型服务调用TaoTokenYOUR_API_KEY判断“这次调用从哪个额度扣”模型请求入口TaoTokenhttps://taotoken.net/api客户端统一填写的 Base URL这里有个安全原则值得写进团队规范Casdoor 的 Client Secret 和 TaoToken 的 API Key 都是服务端资产不要塞进浏览器前端代码也不要提交进仓库。前端只拿access_token去换自己的会话模型请求走你的后端代理或本地客户端Key 全程不出可控边界。如果你正在做 MCP Server 或 Agent 编排同样的边界继续成立Agent 调用数据库类工具时不要直连生产库涉及数据的 SQL 语句和命令由读者在本地环境自行执行与验证模型侧只负责编排与生成不负责越权触达存储。5. Cursor 模型凭据填写对照字段、取值与常见错填到这一步Cursor 的配置就只剩几个输入框。打开设置里的模型Models页面按下面这张对照表填Cursor 配置项填写内容说明OpenAI API KeyYOUR_API_KEY填 TaoToken 控制台创建的 KeyOverride OpenAI Base URLhttps://taotoken.net/api覆盖默认的 OpenAI 官方地址Anthropic API KeyYOUR_API_KEY走 Claude 系列模型时填同一把 Key自定义模型名例如claude-sonnet-4-5、gpt-5以你账号在模型列表里实际可用的为准填完别急着开长任务先用一句最短的对话验证随便问一句“回复 ok”。如果 3 秒内正常返回说明 Key、Base URL、模型名三者对上了。整个过程不需要在 Cursor 里填任何 Casdoor 的字段——Cursor 只认模型供应商Casdoor 的登录发生在你自己的应用侧两者不交叉。最常见的四类错填对照排查效率最高Base URL 多写了路径。填成https://taotoken.net/api/v1/chat/completions这类完整接口地址客户端再拼一次就 404。只填到/api。Key 里有前后空格或换行。从网页复制时经常带上不可见字符粘贴后删掉首尾再保存。把 Casdoor 的 access_token 填进了 API Key。表现为 401且令牌前缀明显不像常规 Key。回到控制台重新复制 TaoToken 的 Key。模型名不在可用范围内。表现为 404 或 model not found换一个你账号模型列表里确实存在的名字。如果 Cursor 里同时开了多个供应商配置切换后记得重启一次客户端部分版本的配置是启动时读取的。6. Claude Code / Codex / CC Switch三件套可复制配置Cursor 之外同一把 Key 还能直接复用到命令行侧的 AI 编码工具。这里必须强调一条硬规则Claude Code 用ANTHROPIC_*系列变量Codex 用config.toml加自己的环境变量两套不能互串。把ANTHROPIC_*套到 Codex 上是无效配置反过来同理。6.1 Claude Codesettings.json走ANTHROPIC_*编辑~/.claude/settings.json用环境变量方式指向 TaoToken{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_AUTH_TOKEN: YOUR_API_KEY, ANTHROPIC_MODEL: claude-sonnet-4-5 } }保存后新开一个终端窗口让环境变量生效然后跑一次最简单的会话验证。三个变量各司其职ANTHROPIC_BASE_URL决定请求打到哪ANTHROPIC_AUTH_TOKEN是身份凭据ANTHROPIC_MODEL指定默认模型。想切换模型时只改最后一个即可。6.2 Codexconfig.toml定义 provider编辑~/.codex/config.toml不要在这里使用ANTHROPIC_*变量Codex 走的是自己的 provider 结构model gpt-5 model_provider taotoken [model_providers.taotoken] name TaoToken base_url https://taotoken.net/api/v1 env_key TAOTOKEN_API_KEY wire_api chat环境变量单独导出export TAOTOKEN_API_KEYYOUR_API_KEY写进~/.bashrc或~/.zshrc时注意别把 Key 明文提交到任何仓库。如果团队有密钥管理服务优先从那里注入。6.3 CC Switch 三件套把切换动作固定下来所谓三件套指的是Claude Code 的settings.json、Codex 的config.toml、以及负责切换的脚本或软链。当你在多个供应商之间来回切时手工改配置文件既慢又容易漏字段建议用目录隔离mkdir -p ~/.ai-switch/{taotoken,backup} # 1) Claude Code 配置 cp ~/.claude/settings.json ~/.ai-switch/taotoken/claude-settings.json # 2) Codex 配置 cp ~/.codex/config.toml ~/.ai-switch/taotoken/codex-config.toml # 3) 一键切回 TaoToken switch-taotoken() { cp ~/.ai-switch/taotoken/claude-settings.json ~/.claude/settings.json cp ~/.ai-switch/taotoken/codex-config.toml ~/.codex/config.toml echo switched to taotoken }把switch-taotoken放进 shell 配置里切换就变成一条命令。三件套的价值不在脚本本身而在于配置有副本、切换可回滚、出问题能立刻比对差异。团队协作时把~/.ai-switch/taotoken/里的模板Key 用占位符提交到内部仓库新人 onboarding 只需要替换YOUR_API_KEY。7. 排障清单401、404、redirect_uri 不匹配与授权码过期把两类问题分开看定位速度会快很多。属于 Casdoor 身份链路的问题invalid_redirect_uri或授权页直接报错后台登记的回调地址和你请求里带的不一致。注意http与https、端口号、结尾斜杠都算差异。invalid_grant授权码已经用过、已过期通常在几分钟内失效或者client_id/redirect_uri与首次授权时不一致。重新走一遍授权拿新码。state校验失败后端要缓存下发的state并比对回调值别把它当摆设。用户信息接口 401access_token过期或拼写有误检查请求头是否是Bearer加空格前缀。属于 TaoToken 模型链路的问题Cursor 或命令行工具返回 401Key 不对、没生效或误把 Casdoor 的令牌填了进去。重新从控制台复制 Key。404 或 model not foundBase URL 多拼了路径或模型名不在可用范围。429触发限流检查是否有并发脚本在刷或确认当前账号的配额情况。请求超时先确认本地网络到模型入口的连通性再排查是否代理配置干扰。一个通用的定位手法把身份链路和模型链路分别用 curl 单独打一次。身份链路打/api/userinfo模型链路打一次最简对话请求。哪条先失败问题就在哪一侧不用两边同时猜。8. 生产前的安全与治理清单OAuth 接好了、Key 也填上了上线前这几点别省改掉 Casdoor 内置管理员默认密码并开启 MFA。身份系统是所有应用的入口它失守等于全线失守。全站 HTTPSredirect_uri也尽量走 https避免授权码在明文链路上被截。授权码流程启用 PKCE尤其是桌面客户端和移动端这类无法安全保存 Client Secret 的场景。Client Secret 与 API Key 分离管理两者都是服务端资产不进前端、不进仓库、不进日志。给每个开发者分配独立 Key方便按人归因用量、按人回收权限离职流程里少一个坑。规划令牌轮换Access Token 按到期时间提前刷新Refresh Token 设定合理的失效周期。开启审计日志Casdoor 侧的登录记录与模型侧调用记录对齐保留异常登录配置告警。高可用按核心基础设施设计身份服务不要当普通后台服务跑单实例数据库和配置定期备份。再补一条和数据相关的边界任何由 Agent 或 MCP 工具触发的数据库操作都不应该直连生产库涉及查询和变更的 SQL请在本地开发环境由人执行并验证结果。模型只负责生成与编排权限边界由你的身份系统和网关共同把住。9. 一条可执行的落地路径把整篇压缩成一条路径就是在 Casdoor 创建 OAuth 应用拿到Client ID/Client Secret登记回调地址拼出授权 URL用授权码调用/api/login/oauth/access_token换回access_token再调/api/userinfo验证身份闭环去 TaoToken 官网 注册并在控制台创建 API Key模型 Base URL 统一填https://taotoken.net/apiKey 用YOUR_API_KEYCursor 填好模型凭据Claude Code 写settings.jsonCodex 写config.tomlCC Switch 三件套固定切换动作。做完前四步你就已经拥有了“人可以统一登录、模型可以统一调用”的两层结构。Casdoor 负责身份TaoToken 负责模型入口两者之间靠一次 Key 的落位衔接没有魔法也没有隐藏环节。接下来按顺序走一遍高转化路径把环境跑起来先在 模型对话 里用默认额度试一句确认账号与模型可用需要长期跑编码任务看 Coding Plan 的套餐说明进 API Keys 创建或轮换你的YOUR_API_KEY按 Claude Code 文档 把命令行侧的ANTHROPIC_*配置补齐。四步走完OAuth 授权 URL、Token 返回值、Cursor 模型凭据填写这三张对照表你手里就都齐了后面无论换机器还是接新同事照表配置即可。