我正在通过移动应用程序向Instagram API提出请求.目前,我只是将用户指向Instagram auth url并将响应类型指定为"access_token".指定此response_type称为隐式身份验证.
显式身份验证:response_type = code隐式身份验证:response_type = access_token
我正试图绕过需要站起来的Web服务来促进显式身份验证.这是必要的,因为在显式身份验证流程中,Instagram API需要调用重定向URL并传入"代码"参数.然后,我的服务器端代码将使用该代码向Instagram发出访问令牌的最终请求.
移动应用程序使用隐式流程的效率要高得多,因为不需要额外的私有维护的身份验证服务来处理它.
Instagram支持以下范围:
basic - 读取与用户相关的任何和所有数据(例如,跟随/跟随列表,照片等)(默认授予)
注释 - 代表用户创建或删除注释
关系 - 代表用户关注和取消关注用户
喜欢 - 喜欢和不喜欢代表用户的项目
当我创建除"basic"之外的任何其他类型的范围规范时,当用户在auth URL提供凭据时,我得到以下响应:
{"code": 400, "error_type": "OAuthException", "error_message": "Invalid scope field(s): basic+likes"}
"基本"以外的任何范围组合都会给出相同的响应.
所以,我的问题是:
是否需要显式身份验证才能指定超出"基本"的范围?
我是否需要指定response_type =代码才能使扩展范围起作用?
这是Instagram限制,还是OAuth 2.0的限制?
提前致谢.
因此,在尝试获取多个范围(基本,喜欢,评论)的权限时,我遇到了类似的+编码问题.我发现的解决方案是在各个范围之间使用空格:
在config/initializers/omniauth.rb文件中:
Rails.application.config.middleware.use OmniAuth::Builder do provider :instagram, 'TOKEN', 'SECRETKEY' , {:scope => "basic likes comments"} end
不幸的是,从2015年4月14日开始,新客户无法访问任何范围,但基本.官方消息可以在客户端配置页面找到:
从2015年4月14日开始,新客户需要请求访问权限才能发布喜欢,关注和评论.有关更多信息,请阅读http://developers.instagram.com上的开发人员博客.
该消息引用以下博客条目:http://developers.instagram.com/post/116410697261/publishing-guidelines-and-signed-requests
Instagram要求发送个人请求以启用应用程序的范围(客户端ID),但您的应用程序必须满足博客条目中描述的某些条件.
我只是尝试使用我的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不允许新客户账户以外的基本范围......
这里的答案是YES,隐式auth流可以请求范围就好了.我的问题与我正在使用的OAuth组件有关.该组件默默地对范围参数的值进行URL编码,该值被Instagram认证终端拒绝.我更新了组件(Xamarin.Auth)以容纳非编码范围参数并发出拉取请求.
感谢@krisak提供了我可以测试的工作URL.