【问题标题】:Pocket API Authorization: ForbiddenPocket API 授权:禁止
【发布时间】:2015-02-22 12:26:48
【问题描述】:

我正在通过使用 Pocket API 构建 Rails 应用程序来测试 RoR,我必须授权用户。对于 HTTP 请求,我使用的是 https://github.com/rest-client/rest-client 库。

第一步,获取请求令牌工作正常:

require 'rest_client'
response = RestClient.post 'https://getpocket.com/v3/oauth/request', :consumer_key => @consumer_key, :redirect_uri => @redirect_uri
@code = response.split("=")[1]

但是我在第二步得到一个 Bad Request 错误,即使用上一步收到的请求令牌获取访问令牌:

access_token = RestClient.post 'https://getpocket.com/v3/oauth/authorize', :consumer_key => @consumer_key, :code => @code

400 Bad Request 是我在 Ruby 应用程序错误屏幕上看到的。我也尝试了使用 cURL 和 POSTMan Chrome 扩展的相同请求,然后我得到的状态码是:403 Forbidden。我得到的 X 错误代码是 158,它转换为 X 错误消息“用户拒绝代码”。关于 Pocket API 文档:http://getpocket.com/developer/docs/authentication

由于我尝试了几个不同的渠道来测试这个请求并且每次都失败,我猜测问题不在于解析,而是我可能遗漏了一个重要的细节或步骤(可能是 HTTP 请求标头?) .提前感谢您的帮助!

【问题讨论】:

    标签: ruby-on-rails oauth httprequest rest-client pocket


    【解决方案1】:

    原来我(或我们)遗漏了一个重要的细节:

    每当在 POSTMan 或其他任何地方测试您对 Pocket API 的请求时,我们自然会跳过访问授权 URL 的过程,其形式为:

    https://getpocket.com/auth/authorize?request_token=YOUR_REQUEST_TOKEN&redirect_uri=YOUR_REDIRECT_URI
    

    现在,即使您之前可能允许您的应用访问您的帐户,但在每次调用时,Pocket API 都不会在访问此 URL 之前激活请求令牌。只有这样您的请求令牌才会被激活并可以用于第二个身份验证步骤。这样做后效果很好。

    作为在 Ruby on Rails 中使用 Pocket API 的任何人的旁注,有一个很好的包装器 gem:https://github.com/turadg/pocket-ruby

    【讨论】:

      【解决方案2】:

      我可以确认您确实缺少 HTTP 标头,这将导致 Pocket 服务器拒绝您尝试发送的发布请求。

      标头可以通过多种方式进行通信:有时它们通过与服务器请求关联的代码/令牌进行通信(这里似乎不是这种情况)。您需要根据您在初始请求中使用 OAuth 执行此操作时使用“授权”标头。

      This 应该可以帮助您:注意“Content-Type:”标头后面的“Authorization:”标头包含返回的信息。

      如需深入阅读,请转至here

      我可能还建议尝试OAuth2 gem,它可以为您完成大部分请求 - 它可能会大大简化您正在做的事情!

      Here's what it looks like on Postman.

      【讨论】:

      • 我尝试添加标题,但没有成功。如果该标头确实是关键,我猜 Pocket 会将其包含在他们的示例请求中,您不觉得吗? (getpocket.com/developer/docs/authentication) 顺便说一下,我将 Rails 排除在外以抽象我的问题并使用 POSTMan 插件 for Chrome。无论如何——我什至通过 cURL 尝试过——它似乎不起作用。如果你能获得一个 Pocket API 帐户并快速检查,也许你能看到我错过的东西?谢谢。
      • 刚刚尝试并取得了一些成功:确保您使用“form-data”字段进行发布请求,因为 API 文档说这些不是原始 URL 参数键 - 只是在答案中添加了一张图片,详细说明了 Postman 的外观。实际上我没有对标头做任何事情 - 如果您仍然遇到问题,我会修改我的答案,因为他们的 API 根本不需要标头。
      • 如果您仔细阅读我的帖子,它会说认证的第一步工作正常,这就是您在屏幕截图中显示的内容。有问题的是第二步:使用第一步生成的代码来生成访问令牌。具体来说,POST /v3/oauth/request。你能试试那个并给我看截图吗?顺便说一句,您应该为您的请求选择“application/x-www-form-urlencoded”选项卡,因为这是 Pocket API 接受的,但它也适用于表单数据。
      猜你喜欢
      • 1970-01-01
      • 2016-03-22
      • 1970-01-01
      • 2018-12-14
      • 2018-09-03
      • 2018-10-24
      • 2019-09-01
      • 1970-01-01
      • 2019-06-22
      相关资源
      最近更新 更多