Рейтинг:0

Последовательность действий при cookie-авторизации на сайт Drupal

флаг jp

Существует сайт drupal 9 с конечной точкой REST, к которой могут получить доступ зарегистрированные пользователи (но не анонимные).

И необходимо сделать запрос GET к конечной точке, используя аутентификацию cookie.

Не могли бы вы уточнить, каков правильный алгоритм этого запроса?

Я пытался сделать это двумя способами.

Способ №1.

Отправьте POST-запрос пользователю/логину с учетными данными и получите CSRF-токен, затем используйте токен в заголовках GET-запроса для моей конечной точки. Безрезультатно.

Способ №2.

Отправьте POST-запрос пользователю/логину с учетными данными, затем отправьте GET-запрос к сеансу/токену и получите токен. После этого используйте этот токен из сеанса/токена в моем запросе GET.

Тоже никакого результата.

В обоих случаях возвращается ошибка 401 (из Insomnia) или ошибка 403 (из внешнего JavaScript).

Мои заголовки для запроса GET

  заголовки: {
    «Тип контента»: «приложение/json»,
    'X-CSRF-токен': токен
  }

Аутентификация файлов cookie проверяется для моей конечной точки REST в пользовательском интерфейсе REST.

Что я делаю не так?

Kevin avatar
флаг in
Если вы проверяете файлы cookie, передаете ли вы их обратно в каждом запросе? Включен ли маршрут для аутентификации файлов cookie? https://www.drupal.org/docs/8/core/modules/rest/3-post-for-creating-content-entities
Yakimkin Roman avatar
флаг jp
Да, маршрут включен для аутентификации файлов cookie. Вот его описание: методы: ПОЛУЧИТЬ форматы: json аутентификация: basic_auth, куки Насчет передачи куков обратно - нет, я передаю токены. вернуть выборку (calcUrl, { метод: «ПОЛУЧИТЬ», заголовки: { «Тип контента»: «приложение/json», 'X-CSRF-токен': токен } }) })
флаг cn
Попробуйте передать cookie обратно
Рейтинг:1
флаг in

Когда вашей конечной точке требуется cookie-auth, вы должны передать cookie, полученный из вашего входа в систему, с вашими следующими запросами GET.

CSRF не имеет ничего общего с авторизацией, это просто защита от CSRF-атак.

Рейтинг:1
флаг ph

Вам нужно сослаться на сохраненный файл cookie. Вот пример использования curl:

curl --header "Тип содержимого: application/json" --request POST -s -c cookie.txt --data-binary '{ "имя": "имя пользователя", "пароль": "пароль" }' https: //example.com/пользователь/логин

От этого вы получите свой файл cookie в файле cookie.txt и свой токен в ответе json.

Затем вы можете сделать такой запрос на получение (запросам на получение не нужен токен CSRF):

curl -s -X GET -b cookie.txt --header 'Тип содержимого: приложение/json' ...

и такой почтовый запрос:

curl -s -X POST -b cookie.txt --header 'Тип содержимого: application/json' --header "X-CSRF-Token: $token"

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.