Access Token URL需按授权类型确定:Authorization Code/Implicit和Client Credentials通常为/oauth/token,Password Credentials已基本弃用;填错会致400/404或405错误。

Access Token URL 必须填对,否则 Request Token 按钮点完直接报 400 或 404,连错误原因都藏在响应体里不提示。
Access Token URL 填什么?看授权类型定
这个地址不是随便猜的,它由你选的 Grant Type 和 OAuth 提供方共同决定:
-
Authorization Code和Implicit:通常指向https://auth.example.com/oauth/token(注意是/oauth/token,不是/authorize) -
Client Credentials:绝大多数也是/oauth/token,比如 OpenProject 是https://your-instance.com/oauth/token,Azure AD 是https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token -
Password Credentials:已基本被主流平台弃用,若真要用,URL 仍为令牌端点,但需确认服务端是否开启该模式(很多会返回"error":"unsupported_grant_type")
常见错误:把 Auth URL(如 https://auth.example.com/oauth/authorize)错当成 Access Token URL —— 这会导致 Postman 尝试用 GET 去请求一个只接受 POST 的地址,直接 405 Method Not Allowed。
Access Token Method 和 Client Authentication 怎么配?
这两个参数必须和 OAuth 提供方文档一致,不匹配就会卡在认证环节:
-
Access Token Method几乎总是POST;极少场景(如某些遗留系统)可能要求GET,但 Postman GUI 不支持 GET 方式传 client_secret,得切到Body手动构造 -
Client Authentication选Send as Basic Auth header时,Postman 会把client_id:client_secretBase64 编码后塞进Authorization: Basic xxx头;选Send as request body则会把client_id和client_secret当作 form data 发送 - 例如 GitHub 要求
Basic Auth header,而 Keycloak 默认接受两种方式,但启用了 client authentication requirement 后可能只认 header
Scope 和 State 容易被忽略的细节
Scope 不是可有可无的占位符,State 也不是“随便填个字符串”:
-
Scope必须和你在 OAuth 平台注册应用时申请的权限完全一致(包括空格、大小写),比如 OpenProject 要api_v3,少个下划线或写成api-v3就返回"error":"invalid_scope" -
State在Authorization Code流程中是强制校验项,Postman 自动生成的随机值一般够用;但如果你手动写脚本调用pm.sendRequest,就得自己生成并存到变量里,否则回调时校验失败 - 某些平台(如 Azure AD)还要求
scope包含offline_access才能拿到 refresh_token,否则每次过期都得重走授权码流程
Token Name 和环境变量怎么联动才不翻车?
填完所有参数点 Request Token 成功后,别急着点 Use Token:
-
Token Name建议带环境标识,比如dev-api_v3-token,避免和测试/生产环境的 token 混淆 - Postman 不会自动把 token 存进环境变量;如果后续想在
Pre-request Script里复用,得手动执行pm.environment.set('access_token', pm.variables.get('access_token'))—— 但更稳妥的做法是:用脚本自己发请求拿 token,绕过 GUI 表单 - GUI 拿到的 token 只绑定到当前请求或集合的
Authorization配置里,不会影响其他集合;跨集合复用必须靠环境变量 +{{access_token}}引用
真正麻烦的从来不是填几个字段,而是当 Request Token 显示成功、Use Token 也点了,结果请求还是 401——这时候大概率是 scope 不对、token 已过期、或者服务端悄悄改了 issuer 校验逻辑。先查响应体里的 error 字段,别盲目重试。











