【问题标题】:Instagram Subscription Callback using AWS API Gateway - Invalid SSL certificate使用 AWS API Gateway 的 Instagram 订阅回调 - 无效的 SSL 证书
【发布时间】:2016-08-17 19:37:22
【问题描述】:

我们正在尝试设置一个 instagram 应用,并且已经完成了整个过程。我们现在在尝试创建 subscription 时遇到了困难。

我们的应用托管在 AWS API Gateway 上,只能使用 HTTPS 端点部署(它不支持未加密的连接)。 当我们使用以下方式执行 POST 以让 instagram 订阅用户时:

curl -F 'client_id=CLIENT-ID' \
     -F 'client_secret=CLIENT-SECRET' \
     -F 'object=user' \
     -F 'aspect=media' \
     -F 'verify_token=myVerifyToken' \
     -F 'callback_url=https://YOUR-CALLBACK/URL' \
     https://api.instagram.com/v1/subscriptions/

然后我们得到以下错误:

{
    "meta": {
        "error_type": "APISubscriptionError",
        "code": 400,
        "error_message": "Invalid response"
    }
}

无论我们使用我们自己在 API Gateway 中注册的 HTTPS 证书,还是使用股票 AWS URL (https://xxxx.execute-api.us-east-1.amazonaws.com) 作为回调(也具有有效的 HTTPS 证书),都会发生这种情况。我已经使用 SSLLabs 验证了证书是“好”的(它们都得到了 A 结果)。我们的代码永远不会被调用(所以问题不是返回 hub.challenge 参数。Instagram 似乎在启动连接时拒绝了 HTTPS 证书。

有趣的是,如果我们在普通机器(EC2 实例)上使用与 AWS API Gateway 一起使用的 same 证书,并将 DNS 记录更改为指向该服务器,那么一切都会按预期工作并且订阅有效。

是否有人在使用 AWS API Gateway 时让 Instagram 订阅正常工作?

【问题讨论】:

    标签: https instagram-api aws-api-gateway


    【解决方案1】:

    我看到这篇文章并觉得被当前答案欺骗了,因为尽管 instagram 的 api 不接受 SNI,但仍然可以使用 API 网关。

    “不幸的是,在 Instagram 升级其 Python 版本之前,如果托管在 API Gateway 上,Instagram 应用程序将无法运行。”不是真的。

    您需要做的就是在 api 网关前面放置一个 CloudFront 实例,它可以正常工作,而不需要昂贵的 SSL 证书或任何东西。

    我附上了我的配置截图,以便将来对某人有所帮助。

    Here is the first configuration screenshot

    Behavior Settings

    Origin Settings

    【讨论】:

    • 加勒特,很好的信息。您确实可以从 API Gateway 中放入 cloudfront,它会起作用。在那种情况下,instagram 正在向 Cloudfront(而不是 API 网关)发布 - 也许是一个悬而未决的问题。
    • 谢谢!如果我错了,请纠正我,但您必须使用默认的 CloudFront SSL 才能正常工作 - 否则您必须启用“自定义 SSL 支持 - 所有客户端”,费用为 600 美元/年。玩这个是令人沮丧的 - 花费大量时间等待发行版更新。
    • 云前端 ssl 有哪些问题?你有没有看我发布的配置截图。我同意,等待发行版更新是一个很大的痛苦。但经过 3 次左右的修补后,我很高兴我做到了。特别是考虑到它是免费的,而且修改起来非常方便。我之前实际上使用过来自第三方的 SSL 证书(如 COMODO),当您需要重新颁发证书时,它们实际上更及时地得到解决。考虑到这一点,这相对容易。
    【解决方案2】:

    我们就此联系了 Instagram。 Instagram 使用的 Python(或其库)版本不支持 API Gateway 使用的 SNI (http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-custom-domains.html),因此不幸的是,如果 Instagram 应用程序托管在 API Gateway 上,则在 Instagram 升级其 Python 版本之前将无法运行。

    正如 Garrett 在下面指出的那样,虽然 Instagram 不能直接发布到 API Gateway,但您可以在 API Gateway 端点前面放置一个云端分发,让 Instagram 指向它。这将起作用。

    【讨论】:

      【解决方案3】:

      为了验证这是否是 API 网关问题,您是否尝试过与 Instagram 直接向您的 API 端点发出相同的质询请求?

      如果您还没有,您还应该尝试在您的 API 阶段使用enable CloudWatch logging 来调试调用。

      【讨论】:

      • 是的。这两个都试过了。我们可以直接向订阅回调端点发出相同的请求,它会回显 hub.challenge 参数。我们已经启用了 cloudwatch 日志记录,并且可以从日志(和 cloudwatch 指标)中看到,我们位于 API Gateway 后面的 Lambda 进程甚至没有被调用(如果 instagram 拒绝 HTTPS 证书,这是有道理的,因为它实际上不会生成底层 HTTP GET 调用)
      • 为了超级清楚,当我写“API端点”时,我的意思是https://xxxx.execute-api.us-east-1.amazonaws.com和你的自定义域。通过 curl 对这些端点的请求是成功还是失败?
      • 调用HTTPS://xxx.execute-api.us-east-1.amazonaws.com 失败,出现与我们的自定义域相同的 SSL 错误
      猜你喜欢
      • 2018-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      相关资源
      最近更新 更多