DrupalサービスOAuth


8

私はこの問題に数週間取り組んでいますが、私の人生の解決策を見つけることができません。(DrupalのWebサイトや他のどこかで)適切なドキュメントが見つからなかったという事実も役に立ちません。そして、すでにここにある質問は時代遅れです(Services 2.x)。

Drupal Commerceが支援するサイト用のRESTサービスを作成しようとしています。現時点では、サービスが行う必要があるのは、Orderリソースでの基本的なCRUD操作を許可することだけであり、OAuthで保護されているため、OAuth 2.0は必要ありません。また、サーバー上のスクリプトを使用して呼び出す必要があるため、ログインのリダイレクトは不可能です(すべてが2-legged認証で行われます)。

現在のスタックは:

  • PHP 5.3.15
  • Drupal 7.15
  • コマースキックスタートプロファイル(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ライブラリを使用し、トークン要求を毎回呼び出すだけで、取得/インデックス関数をOrdersで機能させることができます(認証されていることを除いて、そこで何が行われているのかさえわかりません)。注文にPOSTして注文を作成しようとすると、OAuthが無効になっている場合でも、スクリプトで406を取得し、Google ChromeのRESTコンソールから直接POSTリクエストを試行すると401を取得します。

作成関数の内部で何が起こっているのか私にはわからないので、これはデバッグを悪夢にしました。注文作成ロジックを取り除いて、リクエストペイロードをエコーバックしました。それでも406/401エラーが発生します。

注文にはユーザー認証が必要なため(サービスでOAuthがオフになっている場合でも)、401エラーが発生すると思います。

しかし、なぜ406エラーが発生するのか理解できません。私は、RESTサーバーが返すように設定されているapplication / jsonを受け入れます。

注文作成ロジックをコメントアウトする前でも、注文は作成されていませんでした。(サイトの他の場所で効果的に使用しているものです。)

事前に感謝します。
-T


過去数か月間にサービスモジュールが更新されたため、すべてのPOST、PUT、およびDELETEリクエストのヘッダーでトークンを送信する必要があります。これが発生している問題ではないことを確認してください:drupal.org/node/2013781これはGETリクエストには影響しません。
CR47

RESTwsをチェックすることをお勧めします。これはD8コアに含まれる予定です。
kqw 2014

回答:


1

Getリクエストはセッション認証を必要としませんでした。POST、PUT、DELETEは、ユーザーを認識し、ユーザーがリクエストを完了するための適切な権限を持っているかどうかを確認するためにセッション認証を必要とします。

Oauth認証には多くの種類の認証があります。たとえば、アプリではなくユーザーを認証して、リクエストの完了を承認する必要があります。


0

oAuth認証をオフにするときに同じことを確認しましたか?そうでない場合は、サービス呼び出しでサンプルjson objを返してから、試してください。


Drupal Answersへようこそ!回答としてコメントや質問を投稿しないでください。これはフォーラムではなく、回答を使用してOPに質問することはありません。(十分な評判が得られたら、コメントを投稿することができます。)
フリーラジカル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.