OAuth2 调试工具

调试 OAuth2 授权流程,支持客户端凭证、授权码、密码三种模式的 Token 获取

端点配置
客户端凭证
将发送的请求


                        
                    
关于 OAuth2 调试工具
  • OAuth 2.0 是目前最广泛使用的授权框架(RFC 6749),用于第三方应用安全访问用户资源
  • 客户端凭证模式(Client Credentials):服务间调用,无需用户参与,适合后端微服务
  • 授权码模式(Authorization Code):最安全的用户授权方式,适合 Web / 移动应用
  • 密码模式(Resource Owner Password):直接用用户名密码换 Token,仅适用于高度信任的第一方应用
操作说明
  • 选择授权模式后,点击「示例」按钮可加载对应模式的示例配置
  • 授权码模式:先点击「打开授权页面获取 Code」,在弹出窗口完成授权后,将回调 URL 中的 code 参数填入授权码字段
  • 填写完成后点击「获取 Token」,响应结果格式化展示在右侧
  • 如果返回的 access_token 是 JWT 格式,可复制后到 JWT 解析器工具查看详情
  • 支持 Ctrl+Enter 快捷键触发请求
注意事项
  • 请求由浏览器直接发出,目标 OAuth2 服务需支持 CORS,否则会被浏览器拦截(建议使用 Postman 等工具调试不支持 CORS 的服务)
  • 请勿使用生产环境的真实 Client Secret 进行调试
  • 密码模式已被 OAuth 2.1 草案废弃,新项目不建议使用
  • 所有配置信息仅在浏览器本地处理,不会上传任何数据
OAuth 2.0 知识详解
四种授权模式对比(RFC 6749)
模式 适用场景 是否需要用户参与 安全性 推荐程度
授权码(Authorization Code) Web 应用、移动 App、SPA(配合 PKCE) 最高(code 换 token,secret 不暴露前端) 强烈推荐
客户端凭证(Client Credentials) 服务间调用、后台任务、微服务 高(仅限机器间通信) 推荐
密码模式(Resource Owner Password) 第一方高度信任应用(如官方 App) 是(直接传用户名密码) 低(密码暴露给客户端) 不推荐(OAuth 2.1 已废弃)
隐式模式(Implicit) 旧版 SPA(已废弃) 低(token 直接暴露在 URL 中) 已废弃,禁止使用
授权码模式(Authorization Code)完整流程
  1. 用户点击「使用第三方登录」
    客户端将用户重定向到授权服务器:
    GET /authorize?response_type=code&client_id=xxx&redirect_uri=xxx&scope=openid&state=random
  2. 用户在授权服务器登录并同意授权
    授权服务器将用户重定向回客户端,携带授权码:
    GET /callback?code=AUTH_CODE&state=random
  3. 客户端后端用授权码换取 Token(服务端完成,不经过浏览器)
    POST /token
    grant_type=authorization_code&code=AUTH_CODE&client_id=xxx&client_secret=xxx&redirect_uri=xxx
  4. 授权服务器返回 Token
    {"access_token":"...","token_type":"Bearer","expires_in":3600,"refresh_token":"..."}
  5. 客户端用 Access Token 访问资源服务器
    GET /api/userinfo
    Authorization: Bearer ACCESS_TOKEN
关键安全要点
  • state 参数:防止 CSRF 攻击,每次请求随机生成,回调时验证
  • PKCE(Proof Key for Code Exchange):公开客户端(SPA/移动 App)必须使用,防止授权码拦截攻击
  • redirect_uri 严格匹配:授权服务器必须精确匹配预注册的回调地址
  • 授权码一次性:code 使用后立即失效,有效期通常 10 分钟
PKCE(Proof Key for Code Exchange)— RFC 7636

PKCE 是授权码模式的安全增强,专为无法安全存储 Client Secret 的公开客户端(SPA、移动 App)设计。

流程
  1. 客户端生成随机字符串 code_verifier(43-128 字符)
  2. 计算 code_challenge = BASE64URL(SHA256(code_verifier))
  3. 授权请求携带 code_challengecode_challenge_method=S256
  4. 换 Token 时携带原始 code_verifier,服务器验证哈希是否匹配
# 生成 code_verifier(Node.js)
const verifier = crypto
  .randomBytes(32)
  .toString('base64url');
# 计算 code_challenge
const challenge = crypto
  .createHash('sha256')
  .update(verifier)
  .digest('base64url');
Token 类型与 JWT 结构
Token 类型对比
类型特点验证方式
Opaque Token 随机字符串,无语义 每次请求需调用 introspection 端点验证
JWT 自包含,含 claims 本地验证签名,无需网络请求
JWT 三段结构
Header 算法和类型
{"alg":"RS256","typ":"JWT"}
Payload 声明(Claims)
{"sub":"user123","iss":"https://auth.example.com","exp":1700000000,"scope":"openid profile"}
Signature 签名(防篡改)
RSASHA256(base64(header)+"."+base64(payload), privateKey)
常见 JWT Claims
Claim全称说明
issIssuer签发方(授权服务器地址)
subSubject用户唯一标识
audAudience受众(资源服务器标识)
expExpiration过期时间(Unix 时间戳)
iatIssued At签发时间
jtiJWT ID唯一标识,防重放攻击
scopeScope授权范围
Refresh Token 机制
  • Access Token 有效期通常较短(1 小时),Refresh Token 有效期较长(数天到数月)
  • Access Token 过期后,客户端用 Refresh Token 静默换取新的 Access Token,无需用户重新登录
  • Refresh Token 应安全存储(服务端 Session 或 HttpOnly Cookie),不应存储在 localStorage
  • Refresh Token 轮换(Rotation):每次使用后颁发新的 Refresh Token,旧的立即失效,防止泄露
# 用 Refresh Token 换新 Token
POST /oauth2/token
Content-Type: application/x-www-form-urlencoded
 
grant_type=refresh_token
&refresh_token=REFRESH_TOKEN
&client_id=CLIENT_ID
&client_secret=CLIENT_SECRET
OpenID Connect(OIDC)— OAuth2 的身份层扩展

OAuth 2.0 只解决授权问题(你能做什么),OIDC 在其基础上增加了身份认证(你是谁)。

OIDC 新增内容
  • ID Token:JWT 格式,包含用户身份信息(sub、name、email 等)
  • UserInfo 端点GET /userinfo,用 Access Token 获取用户详细信息
  • Discovery 端点GET /.well-known/openid-configuration,自动发现授权服务器配置
  • nonce 参数:防止 ID Token 重放攻击
常用 OIDC Scope
Scope返回的用户信息
openidsub(用户唯一 ID),必须包含
profilename、nickname、picture、locale 等
emailemail、email_verified
phonephone_number、phone_number_verified
addressaddress(结构化地址)
offline_access返回 Refresh Token
主流 OAuth2 / OIDC 服务商端点参考
服务商 授权端点 Token 端点 Discovery
Microsoft Entra ID https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token /.well-known/openid-configuration
Google https://accounts.google.com/o/oauth2/v2/auth https://oauth2.googleapis.com/token https://accounts.google.com/.well-known/openid-configuration
GitHub https://github.com/login/oauth/authorize https://github.com/login/oauth/access_token 不支持 OIDC
Keycloak https://{host}/realms/{realm}/protocol/openid-connect/auth https://{host}/realms/{realm}/protocol/openid-connect/token /.well-known/openid-configuration
Auth0 https://{domain}/authorize https://{domain}/oauth/token https://{domain}/.well-known/openid-configuration