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

Posted

技术标签:

【中文标题】向 Instagram auth redirect_uri 添加查询参数不起作用?【英文标题】:Adding a query parameter to the Instagram auth redirect_uri doesn't work? 【发布时间】:2015-12-11 23:32:13 【问题描述】:

重现步骤

    在客户端注册一个redirect_uri:http://example.com/publisher/auth 使用包含查询参数的 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
    
    验证 Instagram 用户并允许应用。 用户被重定向回正确的redirect_uri。 使用重定向 URI 中的代码查询参数发布到 Instagram 的 /oauth/access_token 端点。

预期行为

端点响应 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 的错误,但我想看看是否有人发现了这个错误或想出了解决方法。

【问题讨论】:

您在验证令牌时是否提供完全相同的重定向 URL?我很快就会需要这个功能 - 会更新 我确实尝试添加查询,它确实对我有用,也许 instagram 现在支持它。确保编码回调 url。 @HosseinAmin 感谢您的提示。没有考虑对回调 url 进行编码。你拯救了我的一天。 【参考方案1】:

今天遇到了同样的问题。要在请求之间传递自定义数据,您必须将其包含为 state 参数。我的授权请求 url 看起来像这样:

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

注意 &state=...

【讨论】:

要发送多个查询字符串参数,发送它们的 URI 编码为 "&state=" 值。例如https://www.instagram.com/oauth/authorize?client_id=SOME_CLIENT_ID&response_type=code&redirect_uri=http://example.com/auth/InstagramRedirect/&state=%26param1%3Dvalue1%26param1%3Dvalue2【参考方案2】:

您必须为 redirect_uri 提供额外的搜索参数作为最后一个参数

https://www.instagram.com/oauth/authorize/?client_id=be1b911b487f4919b9c2fb7df0c4142c&type=web_server&response_type=code&scope=basic&redirect_uri=https://wpwifidemo.alepo.net/instagram/joinus/?inviteId=00001000-cf33-11e4-9f26-8789dd0b3e01

用户将被重定向到:

https://wpwifidemo.alepo.net/instagram/joinus/?inviteId=00001000-cf33-11e4-9f26-8789dd0b3e01&code=CODE

【讨论】:

我知道它有投票,但有人可以确认它仍然有效吗? 这似乎在 2021 年不起作用。@ssBarBee 上面的回答有效【参考方案3】:

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

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

https://www.instagram.com/oauth/authorize/?client_id=be1b911b487f4919b9c2fb7df0c4142c&redirect_uri=https://wpwifidemo.alepo.net/instagram/joinus/?type=web_server&response_type=code&scope=basic

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

redirect_uri=http%3A%2F%2Fexample.com%2Fpublisher%2Fauth%3FinviteId%3D00001000-cf33-11e4-9f26-8789dd0b3e01?type=web_server

【讨论】:

额外的参数实际上是inviteId=00001000-cf33-11e4-9f26-8789dd0b3e01,而不是type=web_server。而且我认为您的解决方案不会起作用,因为它会向已经具有查询字符串的 URL 添加额外的查询字符串。本质上是:http://example.com/publisher/auth?inviteId=00001000-cf33-11e4-9f26-8789dd0b3e01?type=web_server,这是一种奇怪的 URL 格式。

以上是关于向 Instagram auth redirect_uri 添加查询参数不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

如何获得 Instagram 访问令牌

在 React Native 上通过 Auth0 进行 Instagram 身份验证(不是登录)?

redirect_uri 的参数值无效:缺少方案:/auth/google_auth_code/callback

如何在 python 社交身份验证中分配 Instagram 重定向 uri? [复制]

自定义登录 Instagram API iOS

在 Instagram 基本显示 API 中出现“应用程序限制”错误