You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

技术咨询:如何使用Client ID和Client Secret通过OAuth 2.0协议获取Access Token并提供示例

如何用Client ID和Client Secret通过OAuth 2.0获取Access Token

最适合用Client ID和Client Secret直接获取Access Token的OAuth 2.0授权模式是客户端凭证授权模式(Client Credentials Grant)——这个模式专门给没有用户参与的服务端应用设计,完全依赖应用自身的身份凭证(Client ID/Secret)来获取访问令牌。

核心步骤

  • 第一步:确认授权服务器的Token端点
    你需要先从服务提供商的文档里找到Token请求的URL,通常是类似https://{auth-server-domain}/oauth2/token的地址,平台一般会直接标注为"Token Endpoint"。

  • 第二步:准备身份认证信息
    OAuth 2.0要求把Client ID和Client Secret用冒号拼接成{client_id}:{client_secret}的字符串,然后做Base64编码。比如你的Client ID是my-app-123,Secret是my-secret-456,拼接后是my-app-123:my-secret-456,Base64编码后会是bXktYXBwLTEyMzpteS1zZWNyZXQtNDU2(可以用在线工具或代码生成该编码)。

    有些服务允许在POST请求参数里直接传client_id和client_secret,但不推荐——用Base64编码放在Authorization头里是更规范、更安全的做法。

  • 第三步:发送POST请求获取Token
    向Token端点发送POST请求,必须包含以下参数:

    • grant_type:固定值client_credentials,告知授权服务器你使用的是客户端凭证模式
    • scope(可选):如果服务提供商要求限定访问范围,这里传对应的权限字符串,比如read:users write:data
  • 第四步:解析响应
    请求成功的话,授权服务器会返回JSON格式的响应,核心字段包括:

    • access_token:所需的访问令牌
    • token_type:一般为Bearer,表示后续请求要把Token放在Authorization: Bearer {access_token}头里
    • expires_in:Token的有效期(秒),比如3600表示1小时后过期

操作示例

1. 使用curl命令

curl --request POST \
  --url https://auth.example.com/oauth2/token \
  --header 'Authorization: Basic bXktYXBwLTEyMzpteS1zZWNyZXQtNDU2' \
  --header 'Content-Type: application/x-www-form-urlencoded' \
  --data grant_type=client_credentials \
  --data scope=read:users

2. 使用Python requests库

import requests
import base64

# 你的应用凭证
client_id = "my-app-123"
client_secret = "my-secret-456"

# 生成Base64编码的认证字符串
auth_str = f"{client_id}:{client_secret}"
auth_b64 = base64.b64encode(auth_str.encode("utf-8")).decode("utf-8")

# 请求参数
payload = {
    "grant_type": "client_credentials",
    "scope": "read:users"
}

headers = {
    "Authorization": f"Basic {auth_b64}",
    "Content-Type": "application/x-www-form-urlencoded"
}

# 发送请求
response = requests.post("https://auth.example.com/oauth2/token", data=payload, headers=headers)

# 处理响应
if response.status_code == 200:
    token_data = response.json()
    print("Access Token:", token_data["access_token"])
    print("有效期:", token_data["expires_in"], "秒")
else:
    print("请求失败:", response.status_code, response.text)

注意事项

  • 必须用HTTPS发送请求:绝对不能用HTTP,否则Client Secret会被明文传输,导致泄露。
  • 妥善保管Client Secret:这个凭证相当于应用的密码,绝对不能泄露给第三方,也不要硬编码到代码里(建议用环境变量或密钥管理工具存储)。
  • 处理Token过期:Access Token有有效期,需要在过期前重新请求新的Token(客户端凭证模式无需刷新Token,直接重新发起请求即可)。

内容的提问来源于stack exchange,提问作者Hussam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 06:10:32