文档已更新。
中文(简体) 译文尚未完成。
英语更新时间:2021年9月16日

获取访问口令和权限

本指南说明如何使用授权窗口获取来自 Instagram 用户的短期Instagram 用户访问口令权限

第 1 步:获取授权

应用用户可通过授权窗口向您的应用授予权限短期Instagram 用户访问口令。用户登录并选择允许应用访问的数据后,我们会将用户重定向回您的应用,并附上授权码,然后您可以用该授权码交换短期访问口令。

要开始该过程,请获取授权窗口并将其显示给用户:

https://api.instagram.com/oauth/authorize
  ?client_id={instagram-app-id}
  &redirect_uri={redirect-uri}
  &scope={scope}
  &response_type=code
  &state={state}        //Optional

查询字符串参数

state 外的所有参数均为必需项。

参数示例值说明

client_id
必需
数字字符串

990602627938098

显示在应用面板 > 产品 > Instagram > 基本显示中的 Instagram 应用编号。

redirect_uri
必需
字符串

https://socialsizzle.herokuapp.com/auth/

用户允许或拒绝权限请求后将用户重定向到的 URI。请确保此 URI 与有效 oAuth URI 列表中的某个基本 URI 完全匹配。请记住,应用面板可能向您的 URI 添加了一个尾部斜杠,因此我们建议您检查列表以进行确认。

response_type
必需
字符串

code

将此值设置为 code

scope
必需
以逗号或空格分隔的列表

user_profile,user_media

要向应用用户请求的权限的列表,列表以逗号分隔,或者以空格分隔且以网址编码。user_profile 为必需项。

state
字符串

1

表明服务器特定状态的可选值。例如,您可以用其防范 CSRF 问题。我们会在再次向您重定向用户时添加此参数和值。

示例授权窗口网址

https://api.instagram.com/oauth/authorize
  ?client_id=990602627938098
  &redirect_uri=https://socialsizzle.herokuapp.com/auth/
  &scope=user_profile,user_media
  &response_type=code

授权成功

如果授权成功,我们会将用户重定向至您的 redirect_uri 并通过 code 查询字符串参数向您传递授权码。请捕获该代码,以便应用将其用于交换用户访问口令。

授权码为一次性代码,有效时间为 1 小时

成功的授权重定向示例

https://socialsizzle.herokuapp.com/auth/?code=AQBx-hBsH3...#_

请注意,我们会向重定向 URI 末端附加 #_,但它并不是代码本身的一部分,因此请去除该符号。

授权已取消

如果用户取消授权流程,我们会将该用户重定向到您的 redirect_uri,并附上以下错误参数。在这种情况下,您有责任妥善告知授权失败,并向用户显示相应消息

参数

error

access_denied

error_reason

user_denied

error_description

The+user+denied+your+request

授权已取消的重定向示例

https://socialsizzle.herokuapp.com/auth/?error=access_denied
  &error_reason=user_denied
  &error_description=The+user+denied+your+request

第 2 步:使用代码交换口令

收到代码后,通过向以下端点发送 POST 请求,以便将其交换为短期访问口令:

POST https://api.instagram.com/oauth/access_token

正文参数

在 POST 请求正文中添加以下参数。

参数示例值说明

client_id
必需
数字字符串

990602627938098

显示在应用面板 > 产品 > Instagram > 基本显示中的 Instagram 应用编号。

client_secret
必需
字符串

a1b2C3D4

显示在应用面板 > 产品 > Instagram > 基本显示中的 Instagram 应用密钥。

code
必需
字符串

AQBx-hBsH3...

将用户重定向至您的 redirect_uri 时,我们在 code 参数中向您传递的授权码。

grant_type
必需
字符串

authorization_code

将此值设置为 authorization_code

redirect_uri
必需
字符串

https://socialsizzle. heroku.com/auth/

将用户定向至授权窗口时,您向我们传送的重定向 URI。必须是同一个 URI,否则我们将拒绝请求。

请求示例

curl -X POST \
  https://api.instagram.com/oauth/access_token \
  -F client_id=990602627938098 \
  -F client_secret=eb8c7... \
  -F grant_type=authorization_code \
  -F redirect_uri=https://socialsizzle.herokuapp.com/auth/ \
  -F code=AQBx-hBsH3...

成功响应示例

成功后,API 将返回一个 JSON 负载,其中包含应用用户的短期访问口令和用户 ID。

{
  "access_token": "IGQVJ...",
  "user_id": 17841405793187218
}

请捕获 access_token 值。这是用户的短期 Instagram 用户访问口令,您的应用可以用其访问 Instagram 基本显示 API 端点

拒绝响应示例

如果请求存在某种格式错误,API 将返回错误。

{
  "error_type": "OAuthException",
  "code": 400,
  "error_message": "Matching code was not found or was already used"
}