你写了个小工具想对接天气接口,结果一发请求就返回 401 Unauthorized;或者调试微信公众号后台,填了AppID和AppSecret,却卡在“获取access_token”这一步——别急,这不是你代码写错了,大概率是 token 没拿对、没拿稳。
token 是啥?为啥每次调 API 都要它?
简单说,token 就是服务器发给你的临时‘门禁卡’。它不等于密码,但能证明‘此刻是你本人在操作’。很多平台(比如微博开放平台、阿里云API、GitHub REST API)都要求你在请求头里带上 Authorization: Bearer xxxxxx,这个 xxxxxx 就是 token。
常见获取方式,照着做就行
1. 用户授权后换 token(OAuth 2.0)
比如你想让自己的小程序读取用户微信头像,得先跳转到微信授权页,用户点同意后,你会拿到一个 code,再拿这个 code 去换 token:
POST https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code返回类似:
{"access_token":"ACCESS_TOKEN","expires_in":7200,"refresh_token":"REFRESH_TOKEN","openid":"OPENID","scope":"snsapi_userinfo"}注意:access_token 通常 2 小时过期,别硬存本地反复用,下次请求前先检查是否失效。
2. 直接用账号密钥申请(Client Credentials)
有些内部系统或企业 API(如钉钉机器人、飞书自建应用),不需要用户授权,直接用开发者凭证换取 token:
POST https://open.feishu.cn/open-apis/auth/v3/app_access_token/internal/
{
"app_id": "cli_xxx",
"app_secret": "xxx"
}返回里带 app_access_token 和 expire(秒数),记得缓存并定时刷新。
3. 简单的固定 token(测试用)
像一些轻量级服务(如 JSONPlaceholder 的某些测试接口、部分爬虫代理平台),直接在注册后台生成一个长期 token,复制粘贴进请求头就行:
curl -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." https://api.example.com/data这种适合练手或内网调试,千万别用在正式项目里——泄露就等于裸奔。
容易踩的坑
• 忘记加请求头前缀:写成 Authorization: abc123 是错的,得是 Authorization: Bearer abc123;
• 把 refresh_token 当 access_token 用:它们用途不同,别混;
• token 存在前端 localStorage 里:公开暴露,谁都能偷走,敏感 token 一定要由后端托管;
• 没处理过期重试逻辑:比如第一次请求返回 401,就该自动刷新 token 再重发一次,而不是直接报错给用户。
token 不神秘,就是个带时限的凭证。摸清平台文档里的流程图,配好参数发个请求,基本就能拿下。多试两次,比看十篇理论还管用。