web-dev-qa-db-ja.com

ヘッドレスDrupal 8-Cookie認証

ヘッドレスDrupal 8セットアップを使用して正常にクエリを実行しているDrupal 8コアREST APIからの基本認証jQuery AJAX。次に、本番環境に近づく必要があるため、Cookieベースの認証の使用を開始しました。問題は、基本認証を使用してコンテンツを正常にPOSTしたまったく同じクエリがHTTP 403を返すことです。

POST Cookie認証付きの記事を作成するリクエストの実用的な例はありますか?何か不足していますか?

Drupal 8.3.1をインストールし、REST UI、シリアル化、およびHALモジュールを有効にしてインストールしました。RESTエンドポイントはREST UI。/ node/{node}エンドポイントは、Cookie認証を使用してすべての形式のすべてのリクエストを許可するように設定されます。分類法とユーザーエンドポイントも同様に設定されます。REST APIへのクエリ(POST&GET)は、AJAX jQueryからの呼び出しから行われます。これらのクエリは、基本認証で正常に機能します。これはクエリの例です。 。

$.ajax({
      url: 'my_drupal/entity/node?_format=hal_json&foo=bar,
      method: 'POST',
      headers: {
        'Content-Type': 'application/hal+json',
        'X-CSRF-Token': csrfToken, // I got that token by first GETting my_drupal/rest/session/token
        'Authorization': 'Basic ' + btoa(this.credentials)
      },
      data: JSON.stringify(node),
      success: function (node) {
         // success logic here
      }
    });

私はすでにAuthorizationヘッダーを削除しようとしたが運が悪かったことに注意してください。

HTTPリクエストを監視すると、Drupal認証Cookieが私のPOSTリクエストとともに送信されます。

4
seb-ksl

403エラーには、「このルートでは認証方法は許可されていません」というメッセージが表示されます

OK、ルートはデフォルトでcookie認証方法をサポートしていないようです。

例: https://api.drupal.org/api/drupal/core%21modules%21rest%21config%21optional%21rest.resource.entity.node.yml/8.2.x >ソースを表示

langcode: en
status: true
dependencies:
  module:
    - basic_auth
    - hal
    - node
id: entity.node
plugin_id: 'entity:node'
granularity: resource
configuration:
  methods:
    - GET
    - POST
    - PATCH
    - DELETE
  formats:
    - hal_json
  authentication:
    - basic_auth

ノードリソースを拡張または変更する必要がありますPOST config inrest.resource.entity.node.ymlto 「Cookie」メソッドがsupported_authで有効になっていることを確認します

例:管理UIで構成する

node supported_auth

詳細: https://www.drupal.org/docs/8/api/restful-web-services-api/restful-web-services-api-overview > "Drupal 8.2以降"

3
David Thomas

CSRFトークンを正常に取得できていないようです。 CSRFトークンは/rest/session/tokenから取得できます。

コアエンティティエンドポイントへのPOSTの例については、 https://www.drupal.org/docs/8/core/modules/rest/3-post-for-creating-content-entities を参照してください。

2
edwardchiapet