使用Instagram OAuth获取Access Token报错:Matching code was not found or was already used
解决Instagram OAuth获取Access Token时的"Code Not Found/Used"错误
我帮你梳理几个最可能导致这个OAuthException的原因和对应的解决办法:
注意code的时效性:Instagram授权code的有效期只有短短5分钟左右,如果你拿到code后没有立刻发起换token的请求,大概率已经过期失效了。拿到code后马上执行获取access token的请求,别拖沓。
code是一次性的:哪怕你第一次用这个code请求token失败了,这个code也会被系统标记为已使用,无法再次调用。遇到这种情况,只能重新走一遍授权流程,获取新的code再尝试。
确保参数完全一致:
- 请求access token时的
client_id、client_secret、redirect_uri必须和你获取code时用的完全匹配,包括大小写、是否带末尾斜杠这类细节都不能出错。 - 必须严格设置
grant_type为authorization_code,这个参数写错的话也会触发异常。
- 请求access token时的
检查请求方式和格式:
- 获取access token的请求必须用
POST方法,绝对不能用GET。 - 参数要放在请求体中(用form-data或者x-www-form-urlencoded格式),不要拼在URL里,既避免敏感信息泄露,也能防止参数转义导致的问题。
- 获取access token的请求必须用
测试环境的用户限制:如果是在沙箱测试阶段,要确认你用来授权的账号已经被添加到App的测试用户列表中,未添加的测试账号无法正常完成授权流程。
给你一个正确的请求示例(用curl):
curl -X POST \ https://api.instagram.com/oauth/access_token \ -F client_id=你的Client-ID \ -F client_secret=你的Client-Secret \ -F grant_type=authorization_code \ -F redirect_uri=你的Redirect-URI \ -F code=刚获取的授权code
内容的提问来源于stack exchange,提问作者raien




