跳转到内容

HTTP API

RTC Agent 的 HTTP API 提供 3 个 OAuth2 端点,处理用户认证和令牌管理。整个流程遵循标准 OAuth2 授权码模式,兼容 GitHub、Google 等常见 Provider。

💡 设计要点:前端(F-C)调用 /oauth2/authorize 获取重定向 URL,将用户引导至 OAuth2 Provider 的授权页面。授权完成后,Provider 回调前端,前端拿到授权码后调用 /oauth2/token 完成令牌交换。

端点方法功能调用时机
/oauth2/authorizeGET获取授权重定向 URL用户点击登录
/oauth2/tokenPOST授权码换取令牌授权回调后
/oauth2/refreshPOST刷新 access_token令牌即将过期

获取 OAuth2 授权页面的重定向 URL。前端拿到 URL 后将用户引导至 Provider 的授权页面。

参数位置必填类型说明
providerquerystringOAuth2 Provider 名称(如 "github"
redirect_uriquerystring授权完成后的回调地址(可选,部分 Provider 需要)
{
"redirect_url": "https://github.com/login/oauth/authorize?client_id=xxx&state=yyy",
"state": "a1b2c3d4e5"
}
字段类型说明
redirect_urlstringOAuth2 Provider 授权页面的完整 URL
statestringCSRF 防护随机状态参数,回调时必须原样传回

使用授权码(Authorization Code)换取 access_token 和 refresh_token。这是 OAuth2 授权码流程的核心步骤。

{
"code": "auth_code_from_callback",
"redirect_uri": "https://your-app.com/callback",
"state": "a1b2c3d4e5",
"device_id": "uuid-generated-by-client",
"device_name": "Chrome on Mac",
"user_agent": "Mozilla/5.0 ..."
}
字段必填类型说明
codestring授权码,由授权回调 URL 的 query 参数携带
redirect_uristring回调地址,建议与授权请求中的一致
statestringCSRF 防护 state,必须与授权请求中的 state 一致且仅使用一次
device_idstring前端生成的设备 UUID,用于标识客户端设备
device_namestring设备显示名称,如 "Chrome on Mac"
user_agentstring客户端 User-Agent,用于设备识别
{
"access_token": "eyJhbGciOi...",
"refresh_token": "dGhpcyBpcyBh...",
"expires_in": 3600,
"user_id": "user-uuid"
}
字段类型说明
access_tokenstringJWT access token,有效期由 expires_in 指定
refresh_tokenstringrefresh token,用于在 access_token 过期后换取新 token
expires_inintegeraccess token 过期时间(秒),通常为 3600(1 小时)
user_idstring已认证用户的唯一 ID

💡 Refresh Token 复用:refresh_token 在有效期内可多次使用,每次返回新的 access_token。refresh_token 本身不会被替换或撤销,直到自然过期(默认 30 天)。


使用 refresh_token 换取新的 access_token。refresh_token 在有效期内可重复使用。

{
"refresh_token": "dGhpcyBpcyBh..."
}
字段必填类型说明
refresh_tokenstringrefresh token,有效期内可重复使用
{
"access_token": "eyJhbGciOi...(new)",
"expires_in": 3600
}
字段类型说明
access_tokenstring新的 JWT access token
expires_ininteger新 access token 过期时间(秒)

所有端点在出错时返回统一的错误格式:

{
"error": "invalid_grant",
"error_description": "Authorization code has expired"
}
错误码HTTP 状态码说明常见原因
invalid_request400请求参数无效缺少必填字段、格式错误
invalid_client400客户端认证失败Provider 配置错误
invalid_grant401授权码无效或已过期授权码已使用或超过有效期
server_error500服务器内部错误服务端异常

💡 Content-Type 支持:POST 端点(/oauth2/token/oauth2/refresh)同时支持 application/jsonapplication/x-www-form-urlencoded 两种请求格式。