开发者Skip to main content

  1. 文件
  2. 收费

第三方令牌

使用 authorization_code 授权流为客户生成令牌。这允许使用客户授予的范围进行API调用。

第1步:用户授权

要启动授权码流程,请将客户引导到 /authorize 请求。

https://auth.tesla.cn/oauth2/v3/authorize

参数

名称必填示例描述
response_typecode一个字符串,总是使用值 "code"。
client_idabc-123合作伙伴应用程序客户端ID。
redirect_urihttps://example.com/auth/callback合作伙伴应用程序回调URL,规格:rfc6749
scopeopenid offline_access user_data vehicle_device_data vehicle_cmds vehicle_charging_cmds以空格分隔的范围列表,包含openid和offline_access以获取刷新令牌。
statedb4af3f87...用于验证的随机值。
nonce7baf90cda...用于防止重放攻击的随机值。
prompt_missing_scopes是真是假当该值为真时,如果用户尚未授予所有必需的范围,系统将提示用户授权范围。
require_requested_scopes是真是假当为真时,用户必须授权所有请求的范围才能继续。

示例请求

https://auth.tesla.cn/oauth2/v3/authorize?&client_id=$CLIENT_ID&locale=en-US&prompt=login&redirect_uri=$REDIRECT_URI&response_type=code&scope=openid%20vehicle_device_data%20offline_access&state=$STATE

第二步:回调

用户使用Tesla授权其账户后,将被重定向到指定的redirect_uri

从此回调中提取code URL参数。

第三步:代码交换

执行代码交换调用以生成令牌。access_token可以用于代表用户进行后续的Fleet API请求。

如果使用 offline_access 范围,请保存 refresh_token 以在未来生成令牌。刷新令牌仅一次性使用,有效期为3个月。

invalid_auth_code 响应可能意味着 code 已过期。

POST https://auth.tesla.cn/oauth2/v3/token

参数

名称必填示例描述
grant_typeauthorization_code授权类型必须是authorization_code。
client_idabc-123合作伙伴应用程序客户端ID。
client_secretsecret-password合作伙伴应用程序客户端密钥。
audiencehttps://fleet-api.prd.cn.vn.cloud.tesla.cn生成令牌的受众必须是 Fleet API 基本 URL
redirect_urihttps://example.com/auth/callback合作伙伴应用程序回调URL,规格:rfc6749
scopeopenid offline_access user_data vehicle_device_data vehicle_cmds vehicle_charging_cmds以空格分隔的范围列表。

示例请求

# 授权代码令牌请求
CODE=<从回调中提取>
curl --request POST \
  --header 'Content-Type: application/x-www-form-urlencoded' \
  --data-urlencode 'grant_type=authorization_code' \
  --data-urlencode "client_id=$CLIENT_ID" \
  --data-urlencode "client_secret=$CLIENT_SECRET" \
  --data-urlencode "code=$CODE" \
  --data-urlencode "audience=$AUDIENCE" \
  --data-urlencode "redirect_uri=$CALLBACK" \
  'https://auth.tesla.cn/oauth2/v3/token'
# 从此响应中提取access_token和refresh_token

刷新令牌

使用刷新令牌生成新的访问令牌和刷新令牌。交换刷新令牌时,请确保保存新的刷新令牌以供下次交换使用。为了支持应用程序无法保存新刷新令牌的情况,最近使用的刷新令牌的有效期最长为 24 小时。

刷新令牌交换有两种常见的失败模式,它们会返回“401 - login_required”响应:

  1. 刷新令牌已过期或已被较新的刷新令牌循环淘汰。
  2. 用户已重置密码。

参数

名称必填示例描述
grant_typerefresh_token授权类型必须是refresh_token。
client_idabc-123合作伙伴应用程序客户端ID。
refresh_tokenNA_a90869e9d...代码交换响应中的刷新令牌。

示例请求

# 刷新令牌请求
REFRESH_TOKEN=<从授权代码令牌请求中提取>
curl --request POST \
  --header 'Content-Type: application/x-www-form-urlencoded' \
  --data-urlencode 'grant_type=refresh_token' \
  --data-urlencode "client_id=$CLIENT_ID" \
  --data-urlencode "refresh_token=$REFRESH_TOKEN" \
  'https://auth.tesla.cn/oauth2/v3/token'

范围变更

一旦用户授予应用程序范围,他们可以使用同意管理页面修改范围或撤销访问权限:

https://auth.tesla.cn/user/revoke/consent?revoke_client_id=$CLIENT_ID&back_url=$RETURN_URL

范围修改与现有的刷新令牌兼容,并将应用于新的访问令牌。

可以通过向用户发送包含prompt_missing_scopes=true/authorize 链接来添加范围