Instagram API:范围是否适用于OAuth2隐式身份验证流程?

时间:2013-12-14 06:47:05

标签: oauth scope oauth-2.0 instagram

我正在通过移动应用向Instagram API提出请求。目前,我只是将用户指向Instagram auth url并将响应类型指定为“access_token”。指定此response_type称为隐式身份验证。

显式身份验证:response_type =代码 隐式身份验证:response_type = access_token

我正试图绕过需要站起来的Web服务来促进显式身份验证。这是必要的,因为在显式身份验证流程中,Instagram API需要调用重定向URL并传入“代码”参数。然后,我的服务器端代码将使用该代码向Instagram发出访问令牌的最终请求。

移动应用程序使用隐式流程效率更高,因为不需要额外的私人维护的身份验证服务来处理它。

Instagram支持以下范围:

  • 基本 - 阅读与用户相关的任何和所有数据(例如 跟随/跟踪列表,照片等)(默认授予)
  • 评论 - 代表用户创建或删除评论
  • 人际关系 - 代表用户关注和取消关注用户
  • 喜欢 - 代表用户喜欢和不喜欢的项目

当我创建除“basic”之外的任何其他类型的范围规范时,当用户在auth URL提供凭据时,我得到以下响应:

{"code": 400, "error_type": "OAuthException", "error_message": "Invalid scope field(s): basic+likes"}

“basic”以外的任何范围组合都会给出相同的响应。

所以,我的问题是:

  • 是否需要显式身份验证才能指定超出“基本”的范围?
  • 我是否需要指定response_type =代码才能使扩展范围有效?
  • 这是Instagram的限制,还是OAuth 2.0的限制?

提前致谢。

7 个答案:

答案 0 :(得分:8)

我刚尝试使用带有client_id和scope = basic + likes的隐式oauth流程并且它有效。用您的client_id和redirect_uri替换下面的url,然后尝试。

https://instagram.com/oauth/authorize/?client_id=CLIENT_ID&redirect_uri=REDIRECT-URI&response_type=token&scope=basic+likes

可能是Instagram不允许新客户帐户以外的范围......

答案 1 :(得分:7)

这里的答案是 YES ,隐式身份验证流程可以请求范围就好了。我的问题与我正在使用的OAuth组件有关。该组件默默地对范围参数的值进行URL编码,该值被Instagram认证终端拒绝。我更新了组件(Xamarin.Auth)以容纳非编码范围参数并发出拉取请求。

感谢@krisak提供了我可以测试的工作网址。

答案 2 :(得分:7)

因此,在尝试获取多个范围(基本,喜欢,评论)的权限时,我遇到了类似的+编码问题。我发现的解决方案是在各个范围之间使用空格:

在config / initializers / omniauth.rb文件中:

Rails.application.config.middleware.use OmniAuth::Builder do
    provider :instagram, 'TOKEN', 'SECRETKEY' , {:scope => "basic likes comments"}
end

答案 3 :(得分:7)

不幸的是,自2015年4月14日起,新客户无法访问任何范围,但基本。官方消息可以在客户端配置页面找到:

  

从2015年4月14日开始,新客户需要请求访问权限才能发布喜欢,关注和评论。有关详细信息,请阅读axes properties doc上的开发人员博客。

该消息指的是博客条目:http://developers.instagram.com

Instagram要求发送个人请求以启用应用程序的范围(客户端ID),但您的应用必须满足博客条目中描述的某些条件。

答案 4 :(得分:2)

我有同样的问题,我找到了这个解决方案,并且工作正常

转到Instagram /开发人员下的管理客户端。然后在您的应用下单击“编辑”,并取消选中“禁用隐式OAuth”。现在它将按预期工作。

Instragram之所以改变了这个原因,所以在上市之前应该三思而后行:http://instagram.com/developer/restrict-api-requests/

答案 5 :(得分:1)

此时, 2015年5月,是。

正如instagram documentation关于身份验证的解释:

  

Instagram API使用OAuth 2.0协议很简单,但是   有效的认证和授权。 OAuth 2.0更容易   使用比以前的方案和开发人员可以开始使用   Instagram API几乎立即。要记住的一件事是   所有对API的请求都必须通过SSL(https:// not   HTTP://)

您首先需要注册您的应用here,然后使用Instagram提供的客户ID,您可以执行此请求:

 $invoice->orWhere(function($query) {
                $query->where('invoices.status', '=', InvoiceStatusConstant::SENT)
                        ->where('invoices.due_date', '<', Carbon::today()->toDateString())
                        ->where(DB::raw('(SELECT ROUND(SUM(invoice_items.quantity*invoice_items.rate), 2) from invoice_items'), '=',
                                DB::raw("(SELECT SUM(payments.amount) from payments "));
            });

你必须把你的client_id和redirect_uri放在哪里。

仅供参考,在redirect_uri字段中您也可以插入

https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=code

答案 6 :(得分:0)

你必须在范围内添加“+”,例如“基本+评论+关注者列表+喜欢+公共关系+关系”