web-dev-qa-db-fra.com

Sans tête Drupal 8 - authentification par cookie

J'utilise avec succès une configuration sans tête Drupal 8 que j'interroge via Drupal 8 core REST avec authentification de base de jQuery AJAX. Maintenant que je dois me rapprocher des conditions de production, j'ai commencé à essayer d'utiliser l'authentification basée sur les cookies. Le problème est que la même requête qui a POSTÉ avec succès le contenu en utilisant l'authentification de base renvoie maintenant un HTTP 403.

Existe-t-il un exemple de travail d'une demande POST pour créer un article avec l'authentification par cookie? Suis-je en train de manquer quelque chose?

J'ai une nouvelle installation Drupal 8.3.1 avec les modules REST UI, Serialization et HAL activés. Les points de terminaison REST sont configuré via REST UI. Le point de terminaison / node/{node} est configuré pour autoriser toutes les demandes dans tous les formats avec l'authentification par cookie. La taxonomie et les points de terminaison utilisateur sont configurés de la même manière . Les requêtes (POST & GET) à REST API sont effectuées à partir de AJAX appels de jQuery. Ces requêtes fonctionnent correctement avec l'authentification de base. Ceci est un exemple de requête .

$.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
      }
    });

Veuillez noter que j'ai déjà essayé de supprimer l'en-tête Autorisation sans succès.

En surveillant les requêtes HTTP, je vois le cookie d'authentification Drupal envoyé avec ma requête POST.

4
seb-ksl

l'erreur 403 est accompagnée d'un message disant "Méthode d'authentification non autorisée sur cette route"

OK, il apparaît donc que la route peut ne pas prendre en charge la méthode d'authentification par cookie, par défaut.

Par exemple, https://api.drupal.org/api/drupal/core%21modules%21rest%21config%21optional%21rest.resource.entity.node.yml/8.2.x > Voir la source

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

Vous devrez étendre ou modifier la ressource de nœud POST config in rest.resource.entity.node.yml to assurez-vous que la méthode "cookie" est activée dans supported_auth

par exemple: configurer dans l'interface utilisateur d'administration

node supported_auth

Plus d'informations: https://www.drupal.org/docs/8/api/restful-web-services-api/restful-web-services-api-overview > "Drupal 8.2 et versions ultérieures"

3
David Thomas

Il semble que vous n'ayez pas réussi à récupérer le jeton CSRF. Le jeton CSRF peut être récupéré à partir de /rest/session/token.

Voir https://www.drupal.org/docs/8/core/modules/rest/3-post-for-creating-content-entities pour des exemples sur le POSTage vers les points de terminaison d'entité principaux.

2
edwardchiapet