本篇介绍应用注册、授权官方文档,下一篇是demo演示
写在前面的话
你会惊奇地发现,整个授权的过程,竟然不需要集成sdk,甚至说,都几乎不用写代码,这与微信、新浪、QQ授权完全不同
注册账号
首先注册并登录你的Instagram账户
注册你的应用
- 点击 右上角绿色按钮 Register a New Client
如果你还没注册你的app,那么下面红框内容是空的,我这里是已经注册了两个app了
- 新建一个应用
输入相关内容,值得注意的是 Valid redirect URI redirect URIs
3. 点击上图Register按钮
- 点击MANAGE按钮
- 点击 Security 选项卡
先把这个对勾去掉,
授权分两种模式,一种是服务端授权(推荐,安全),一种是客户端授权(不需要服务端,app前端就可拿到授权token,但是不安全,不推荐)
我们在这里先演示客户单授权的demo,所以这个对勾必须取消,勾上的话,客户端授权模式就不生效了,到时候会报错
上图中取消勾选候,点击页面下方的Update Client 按钮,让修改生效
- 点击 Sandbox 选项卡
- 点击 Permission 选项卡
到这里,你的应用申请完毕,要特别注意,上文里,提到的关键部分,不注意的话都是坑,关键之处再次提示一下
- Valid redirect URIs:
- Disable implicit OAuth:
- Sandbox Mode
阅读授权流程文档
任何文章,都比不上官方文档,英文也得读
建议至少大概过一遍阅读此文档,实在不想看,可直接看下一篇(demo演示)
授权
Instagram API使用OAuth 2.0协议进行简单但有效的身份验证和授权。
OAuth 2.0比以前的方案更容易使用,开发人员几乎可以立即开始使用Instagram API。
要记住的一件事是,所有对API的请求都必须通过SSL(https://而不是http://)进行。
你需要验证吗?
Instagram API需要身份验证 - 特别是代表用户发出的请求。
经过身份验证的请求需要access_token。
这些令牌对用户来说是唯一的,应该安全存储。
访问令牌可能在将来的任何时间到期。
接收access_token
要接收access_token,您必须执行以下操作:
将用户引导至我们的授权网址。
- 如果用户未登录,则会要求他们登录。
- 将询问用户是否要授予您的应用程序访问其Instagram数据的权限。
你有两种方式获得用户授权:
服务器端流程(推荐):将用户重定向到您选择的URI。
获取提供的代码参数,并通过将代码POST到access_token url来交换access_token。
隐式流(不推荐):我们不是处理代码,而是将access_token包含在URL中作为片段(#)。
此方法不太安全,但允许没有任何服务器组件的应用程序接收access_token。
即使我们的访问令牌没有指定过期时间,您的应用程序也应该处理用户撤销访问权限或Instagram在一段时间后使令牌过期的情况。
如果令牌不再有效,则API响应将包含“error_type = OAuthAccessTokenException”。
在这种情况下,您需要重新验证用户以获取新的有效令牌。
换句话说:不要假设您的access_token永远有效。
** 服务器端(显式)流程 **
使用服务器端流程非常简单。
只需按以下步骤操作:
第一步:将用户引导至我们的授权网址
这个网址不要照抄呀,注意其中的大写字母部分CLIENT-ID,REDIRECT-URI要换成你当时申请的应用的相关字段
注意:您可以提供可选的范围参数,以请求“基本”权限范围之外的其他权限。
详细了解范围。
注意:您可以提供可选的状态参数以执行特定于服务器的状态。
例如,您可以使用它来防止CSRF问题。
此时,我们向用户显示一个登录屏幕,然后是一个确认屏幕,用于授予您的应用访问其Instagram数据的权限。
第二步:从Instagram接收重定向
用户授权您的应用程序后,我们会向您的redirect_uri发出重定向,并在第3步中使用代码参数。
HTTP://您的重定向的URI码= CODE
请注意,重定向URI的主机和路径组件必须与您注册的redirect_uri完全匹配(包括尾部斜杠)。
如果需要动态改变行为,还可以在提供的redirect_uri中包含其他查询参数。
例子:
那个表格就是告诉你,你注册时的uri,跟你使用的uri一定要一直,如果要附带参数,要按照下表格式来
如果用户拒绝您的批准请求,我们将使用以下参数将用户重定向到您的redirect_uri:
- error:access_denied
- error_reason:user_denied
- error_description:用户拒绝了您的请求
在这种情况下,您有责任优雅地失败并向您的用户显示相应的错误消息。
第三步:请求access_token
现在,您需要将上一步中收到的代码交换为访问令牌。
为了进行此交换,您只需将此代码以及一些应用程序标识参数POST到我们的access_token端点。
这些是必需的参数:
- client_id:您的客户端ID
- client_secret:你的客户秘密
- grant_type:authorization_code是当前唯一支持的值
- redirect_uri:您在授权请求中使用的redirect_uri。(注意:这必须与授权请求中的值相同。)
- 代码:您在授权步骤中收到的确切代码。
如果成功,此调用将返回一个整齐打包的OAuth令牌,您可以使用该令牌对API进行经过身份验证的调用。
我们还包括刚刚为您方便验证的用户
客户端(隐式)身份验证
如果您正在构建一个没有服务器组件的应用程序(例如纯粹的javascript应用程序),您会注意到无法完成上述第三步以接收您的access_token而无需将密钥存储在客户端上。
您永远不应将client_id密钥传递或存储到客户端。
对于这些情况,存在隐式认证流程。
第一步:将用户引导至我们的授权网址
替换大写字母部分
此时,我们向用户显示一个登录屏幕,然后是一个确认屏幕,在该屏幕上,他们授予您应用访问其Instagram数据的权限。
请注意,与显式流不同,此处的响应类型为“token”。
第二步:通过URL片段接收access_token
一旦用户通过身份验证然后授权您的应用程序,Instagram就会使用url片段中的access_token将它们重定向到您的redirect_uri。
它看起来像这样:
只需从URL片段中获取access_token,就可以了。
如果用户选择不授权您的应用程序,您将收到与显式流程中相同的错误响应