Drupal服务OAuth


8

我已经在这个问题上工作了两个星期,但找不到适合我一生的解决方案。我没有找到任何不错的文档(在Drupal的网站上或其他地方),这一事实也无济于事。并且这里已经存在的问题已经过时了(Services 2.x)。

我正在尝试为Drupal Commerce支持的站点创建REST服务。目前,所有服务所需要做的就是允许对Order资源进行基本的CRUD操作,并通过OAuth进行保护,因此不需要OAuth 2.0。还必须使用服务器上的脚本来调用它,因此登录重定向是不可能的(所有操作都通过两足身份验证完成)。

当前堆栈为:

  • PHP 5.3.15
  • Drupal 7.15
  • Commerce Kickstart配置文件(7.x-2.0-rc1)
  • 服务7.x-3.2
  • OAuth 7.x-3.0 + 18-dev
  • OAuth身份验证7.x-3.2
  • REST服务器7.x-3.2
  • Commerce Services 7.x-1.x-dev(这是我添加了自定义订单代码的模块)

如果我使用OAuth PHP库并每次都调用令牌请求,则可以使Retrieve / Index函数适用于Orders(我什至不知道发生了什么,除非它可以进行身份​​验证...)。如果我尝试过帐到订单并创建订单,则即使禁用了OAuth,我也会从脚本获得406,从Google Chrome浏览器的REST控制台尝试直接过帐请求时得到401。

由于我不知道create函数内部发生了什么,这使调试成为一场噩梦。我尝试剥离其订单创建逻辑,然后回显请求有效负载。仍然会出现406/401错误。

我假设我收到401错误,因为订单需要用户验证(即使该服务的OAuth已关闭)。

我不明白为什么会出现406错误。我接受application / json,这是我的REST服务器设置要返回的内容。

在我注释掉订单创建逻辑之前,就没有创建订单。(这是我在网站上其他地方有效使用的信息。)

提前赞赏。
-T


在过去的几个月中,服务模块已更新,因此您需要在标头中为所有POST,PUT和DELETE请求发送令牌。确保这不是您遇到的问题:drupal.org/node/2013781这不会影响GET请求。
CR47 2013年

我建议检查RESTws,它将在D8核心中。
kqw 2014年

Answers:


1

获取请求不需要会话身份验证,POST,PUT,DELETE要求会话身份验证以了解用户并检查用户是否具有完成请求的正确权限。

Oauth身份验证具有多种类型的auth,您必须确保您对用户(而不是应用程序)进行身份验证,以便授权完成请求。


0

您是否在关闭oAuth身份验证时也进行了检查?如果没有,请在您的服务调用上返回示例json obj后尝试。


欢迎来到Drupal答案!请不要发表评论或问题作为答案。这不是论坛,答案绝不能用于向OP提出问题。(一旦您有足够的声誉,您将可以发表评论。)
Free Radical 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.