带有OAuth插件的WP REST Api需要WordPress登录cookie来获取访问令牌

时间:2015-01-28 11:30:30

标签: wordpress oauth wordpress-plugin

我使用Scala在Play Framework上运行网站。作为网站的一部分,我使用WP REST Api从单独托管的WordPress实例中提取内容。

我一直在尝试使用他们的OAuth plugin访问我的WordPress实例上的授权JSON。作为流程的一部分,我需要能够在收到验证者后回调到我的原始网站。要在Play中处理OAuth1请求,我使用了优秀的Scribe库。

我可以进入OAuth1工作流程中的阶段,我需要交换我的验证程序和请求令牌以获取访问令牌,但是我只能通过拦截我的传出请求并附加我之前使用的WordPress登录cookie来解决这个问题。集。

我的工作流程是:

  1. 使用WP CLI成功创建消费者
  2. 可以打 http://mywordpress.com/oauth1/request并收到请求令牌
  3. 可以打 http://mywordpress.com/oauth1/authorize?oauth_token=mytoken&oauth_callback=http://mysite/callback
  4. 当我点击上述网址时,我被重定向到 http://mywordpress.com/wp-login.php?action=oauth1_authorize&oauth_token=mytoken&oauth_callback=http://mysite/callback
  5. 从那里,我授权令牌,然后重定向回 http://mysite/callback?oauth_token=mytoken&oauth_verifier=myverifier&wp_scope=%2A
  6. 但是当我尝试发布获取访问令牌的请求时,我得到了401 来自http://mywordpress.com
  7. 但是,如果我拦截相同的话 使用调试器请求,而是发送与我相同的请求 WordPress登录cookie附加在标题中,我成功了 接收新访问权限oauth_token和oauth_token_secret。
  8. 所以我需要从http://mywordpress.com域手动附加cookie,并使用密钥启动wordpress_logged_in _...以获取我的访问令牌。

    当我手动附加wordpress_logged_in _...时,我将通过Google Chrome的高级REST客户端应用程序作为帖子发送,并将OAuth参数作为授权标题。如上所述,这成功地让我回到了访问令牌。

    有没有其他人有这个问题,并解决了它?我在设置或请求中是否犯了一些基本错误?

2 个答案:

答案 0 :(得分:1)

这就是问题:WP cookie,浏览器不允许你通过http标头发送它。您是否尝试过这样做:https://github.com/WP-API/OAuth1/issues/39#issuecomment-57620637

答案 1 :(得分:0)

我已经通过JSON Web Token方法成功访问了WP API,如果你在令牌上设置一个计时器然后根据需要刷新它,这可能没问题。

我使用了这个插件:JWT Authentication for the WP REST API,它就像一个魅力。

我知道这不是OAuth1,但它确实为我安全地验证Wordpress节省了大量时间。