第三方令牌
使用 authorization_code
授权流为客户生成令牌。这允许使用客户授予的范围进行API调用。
第1步:用户授权
要启动授权码流程,请将客户引导到 /authorize
请求。
https://auth.tesla.cn/oauth2/v3/authorize
参数
名称 | 必填 | 示例 | 描述 |
---|---|---|---|
response_type | 是 | code | 一个字符串,总是使用值 "code"。 |
client_id | 是 | abc-123 | 合作伙伴应用程序客户端ID。 |
redirect_uri | 是 | https://example.com/auth/callback | 合作伙伴应用程序回调URL,规格:rfc6749。 |
scope | 是 | openid offline_access user_data vehicle_device_data vehicle_cmds vehicle_charging_cmds | 以空格分隔的范围列表,包含openid和offline_access以获取刷新令牌。 |
state | 是 | db4af3f87... | 用于验证的随机值。 |
nonce | 否 | 7baf90cda... | 用于防止重放攻击的随机值。 |
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_type | 是 | authorization_code | 授权类型必须是authorization_code。 |
client_id | 是 | abc-123 | 合作伙伴应用程序客户端ID。 |
client_secret | 是 | secret-password | 合作伙伴应用程序客户端密钥。 |
audience | 是 | https://fleet-api.prd.cn.vn.cloud.tesla.cn | 生成令牌的受众必须是 Fleet API 基本 URL。 |
redirect_uri | 是 | https://example.com/auth/callback | 合作伙伴应用程序回调URL,规格:rfc6749。 |
scope | 否 | openid 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”响应:
- 刷新令牌已过期或已被较新的刷新令牌循环淘汰。
- 用户已重置密码。
参数
名称 | 必填 | 示例 | 描述 |
---|---|---|---|
grant_type | 是 | refresh_token | 授权类型必须是refresh_token。 |
client_id | 是 | abc-123 | 合作伙伴应用程序客户端ID。 |
refresh_token | 是 | NA_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 链接来添加范围