必须使用JWT令牌认证Grok API,通过环境变量注入GROK_API_KEY后,用PyJWT或Grok内置JWTBuilder生成HS256签名的token(含iat/exp),再以Bearer方式放入Authorization头发起请求。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

要让Grok API接口只响应合法调用,必须在每次请求中携带有效JWT令牌,否则401错误将直接中断通信——这一步不是可选项,而是强制准入门槛。
配置Grok API密钥与JWT生成环境
安装官方SDK后,【GROK_API_KEY必须通过环境变量注入,硬编码在代码里会导致密钥泄露】。执行以下命令完成基础准备:
pip install grok-sdk==3.5.0
python -c "import grok; print(grok.__version__)"
接着在shell中设置密钥:
export GROK_API_KEY="sk-xxx-your-real-key-here"
注意:Windows用户请改用set GROK_API_KEY=...,且该变量需在Python进程启动前生效。
构造带JWT的认证请求头
Grok服务端不接受原始API密钥直传,必须由客户端自行封装为JWT格式。采用HS256签名方式,载荷至少包含iat(签发时间)和exp(过期时间)两个字段。
方法一:使用PyJWT库手动构造
import jwt
import time
payload = {
"iat": int(time.time()),
"exp": int(time.time()) + 3600,
"iss": "grok-client"
}
token = jwt.encode(payload, os.getenv("GROK_API_KEY"), algorithm="HS256")
方法二:调用Grok内置JWT工厂(推荐)
from grok.auth import JWTBuilder
builder = JWTBuilder(api_key=os.getenv("GROK_API_KEY"))
token = builder.build(expire_in=3600)
生成后的token字符串形如eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...,长度固定为212字符,少一位都会验证失败。
发起带鉴权头的API调用
第一步:组装标准Authorization头
headers = {
"Authorization": f"Bearer {token}",
"Content-Type": "application/json"
}
第二步:发起POST请求
import requests
url = "https://api.grok.com/v3/completion"
data = {"model": "grok-3.5", "prompt": "解释量子纠缠"}
response = requests.post(url, headers=headers, json=data)
第三步:检查响应状态码
if response.status_code == 401:
print("JWT已失效或签名错误,请重新生成")
elif response.status_code == 429:
print("当前密钥调用频次超限")
else:
print(response.json()["choices"][0]["text"])
关键点:Grok服务端仅校验JWT签名和exp字段,不校验iss或aud,但必须确保iat ≤ 当前时间 ≤ exp,时间偏差超过60秒即拒绝。


















