将查询参数添加到Instagram auth redirect_uri不起作用?

时间:2015-09-15 16:01:22

标签: oauth instagram instagram-api

重现步骤

  1. 在客户端注册redirect_uri:http://example.com/publisher/auth
  2. 使用包含查询参数的redirect_uri将用户定向到/ oauth / authorize端点:
    https://api.instagram.com/oauth/authorize/?client_id=xxx&redirect_uri=http%3A%2F%2Fexample.com%2Fpublisher%2Fauth%3FinviteId%3D00001000-cf33-11e4-9f26-8789dd0b3e01&response_type=code&scope=basic&type=web_server
    作为参考,这些查询参数是:
    client_id=xxx
    redirect_uri=http%3A%2F%2Fexample.com%2Fpublisher%2Fauth%3FinviteId%3D00001000-cf33-11e4-9f26-8789dd0b3e01
    response_type=code
    scope=basic
    type=web_server
    
  3. 验证Instagram用户并允许该应用。
  4. 将用户重定向回正确的redirect_uri。
  5. 使用重定向URI中的代码查询参数发布到Instagram的/ oauth / access_token端点。
  6. 预期行为

    端点以200和访问令牌响应。

    实际行为

    端点响应:

    
    code=400
    error_type = 'OAuthException'
    error_message = 'Redirect URI doesn't match original redirect URI'
    
    

    我到目前为止所做的调查

    为了确认这是Instagram的问题,我检查了the API docs,其中非常明确地说明应该可以向重定向URI添加查询参数。我也试过只改变查询参数。例如,当使用此/ oauth / authorize URL替换时,我得到了预期的行为:

    https://api.instagram.com/oauth/authorize/?type=web_server&client_id=xxx&redirect_uri=http%3A%2F%2Fexample.com%2Fpublisher%2Fauth&response_type=code&scope=basic

    作为参考,这些查询参数是:

    client_id=xxx
    redirect_uri=http%3A%2F%2Fexample.com%2Fpublisher%2Fauth
    response_type=code
    scope=basic
    type=web_server

    注释

    这个问题实际上是another question的副本,实际上并没有真正成为一个问题,而且从来没有得到任何答案。

    我已经在Instagram上提交了一个错误,但我想知道是否有人发现了这个错误或想出了解决方法。

3 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

今天有同样的问题。要获取在请求之间传递的自定义数据,您必须将其作为state参数。我的授权请求网址看起来像这样:

  

https://www.instagram.com/oauth/authorize?client_id=SOME_CLIENT_ID&response_type=code&redirect_uri=http://example.com/auth/InstagramRedirect/ &state = 855C0114-F860-420A-AEB1-A276644FCCEA

请注意状态 = ...

答案 2 :(得分:0)

这个问题可能为时已晚。但是我今天遇到了同样的问题。已经发布了这个问题,并且将参数传递给认证URL的解决方案如下。

您的额外参数似乎是 type = web_server ,考虑到这一点,您获取代码的URL应如下所示

  

https://www.instagram.com/oauth/authorize/?client_id=be1b911b487f4919b9c2fb7df0c4142c&redirect_uri=https://wpwifidemo.alepo.net/instagram/joinus/键入= web_server &安培; RESPONSE_TYPE =代码&安培;范围=基本

然后在调用accessToken API时,将 redirect_uri 参数附加到您传递的参数(在应用程序中配置不同)。 例如

REDIRECT_URI = HTTP%3A%2F%2Fexample.com%2Fpublisher%2Fauth%3FinviteId%3D00001000-cf33-11e4-9f26-8789dd0b3e01?的键入= web_server