向 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 添加查询参数不起作用?的主要内容,如果未能解决你的问题,请参考以下文章
在 React Native 上通过 Auth0 进行 Instagram 身份验证(不是登录)?
redirect_uri 的参数值无效:缺少方案:/auth/google_auth_code/callback