Аутентификация в REST API

2 апр. 2019 г., 17:33:50
Просмотры: 13.7K
Голосов: 2

Я пытаюсь изучить WP REST API.

Я хочу создать запись.

Я использую приложение Postman.

Я получаю ошибку 401 при попытке выполнить POST-запрос (с GET всё работает нормально).

Но я думал, что входа в систему моего сайта на WordPress будет достаточно для аутентификации через cookies.

3
Комментарии

Проверьте это.

Sally CJ Sally CJ
2 апр. 2019 г. 19:40:00

Попробуйте Application Passwords, которые находятся в бета-плагинах. Смотрите https://maheshwaghmare.com/docs/application-passwords

maheshwaghmare maheshwaghmare
13 мая 2020 г. 21:08:51

Я не понимаю, как WordPress может блокировать неавторизованный доступ, но при этом у него нет метода авторизации. Это как будто WP дает замок, а вам нужно выбрать ключ.

Enrique René Enrique René
22 дек. 2020 г. 21:05:06
Все ответы на вопрос 2
0

Ядро WordPress теперь поддерживает новый REST API, начиная с версии 4.8.x. Среди множества новых возможностей теперь можно создать фронтенд для веб-сайта или приложения с использованием таких фреймворков, как React или Angular, а также использовать WordPress и его знакомую админ-панель для управления бэкендом. Таким образом, весь контент можно получать на фронтенде, делая запросы к API WordPress. Некоторые запросы (в основном POST-запросы) требуют аутентификации.

Используя JWT, вы можете расширить WP REST API, применяя аутентификацию с помощью JSON Web Tokens в качестве метода авторизации.

Аутентификация в WordPress REST API:

Стандартная аутентификация через куки: аутентификация через куки — единственный механизм, доступный в WordPress по умолчанию.

Удалённые приложения:

Для поддержки удалённых приложений необходимо добавить новый метод аутентификации REST API с помощью плагина.

В настоящее время поддерживаются следующие варианты: Basic Auth, OAuth и JWT:

Basic Auth с использованием имени пользователя и пароля считается небезопасным и должен использоваться только в сценариях разработки.

OAuth — отличный вариант, но его аутентификация может быть сложной.

JWT — это прекрасное решение, которое отлично работает с фронтенд-фреймворками.

Что такое JSON Web Token?

JSON Web Token (JWT) — это открытый стандарт (RFC 7519), который определяет компактный и самодостаточный способ безопасной передачи информации между сторонами в формате JSON. Эта информация может быть проверена и доверена, так как она цифрово подписана. JWT могут быть подписаны с использованием секретного ключа (алгоритм HMAC) или пары открытый/закрытый ключ с использованием RSA или ECDSA.

Хотя JWT можно зашифровать для обеспечения конфиденциальности между сторонами, мы сосредоточимся на подписанных токенах. Подписанные токены позволяют проверить целостность содержащихся в них утверждений, а зашифрованные токены скрывают эти утверждения от других сторон. Когда токены подписаны с использованием пары открытый/закрытый ключ, подпись также подтверждает, что только сторона, владеющая закрытым ключом, является подписавшей.

Использование JSON Web Tokens:

Авторизация — после входа пользователя каждый последующий запрос будет включать JWT, что позволит пользователю получить доступ к маршрутам, сервисам и ресурсам, разрешённым этим токеном.

Обмен информацией — JSON Web Tokens — это хороший способ безопасной передачи информации между сторонами. Поскольку JWT могут быть подписаны (например, с использованием пары открытый/закрытый ключ).

Почему стоит использовать JSON Web Tokens?

Безопасность — безопасная передача информации между сторонами с использованием пары открытый/закрытый ключ.

JSON-парсеры распространены в большинстве языков программирования, так как они напрямую отображаются на объекты.

Простота обработки токена на стороне клиента на различных платформах, особенно мобильных.

Компактность: благодаря своему размеру токен может быть передан через URL, POST-параметр или в HTTP-заголовке. Кроме того, из-за своего размера его передача происходит быстро.

Самодостаточность: полезная нагрузка содержит всю необходимую информацию о пользователе, что позволяет избежать многократных запросов к базе данных.

Как работают JSON Web Tokens? Схема работы JWT Пользователь входит в систему ([имя пользователя/пароль]) => Сервер аутентификации => Пользователь аутентифицирован, JWT создан и возвращён пользователю.

Пользователь (передаёт [JWT] при выполнении API-запросов) => Сервер приложения => Приложение проверяет и обрабатывает API-запрос => отправляет данные/сообщение пользователю.

Сначала пользователь входит в систему на сервере аутентификации, используя его систему входа (например, имя пользователя и пароль, вход через Facebook, Google, Twitter и т. д.). Сервер аутентификации создаёт JWT и отправляет его пользователю. Когда пользователь делает API-запросы к приложению, он передаёт JWT вместе с запросом. В этой схеме сервер приложения настроен на проверку того, что входящий JWT был создан сервером аутентификации.

Когда пользователь делает API-запросы с прикреплённым JWT, приложение может использовать токен для проверки, что запрос исходит от аутентифицированного пользователя.

JWT — это просто строка в следующем формате:

header.payload.signature

Заголовок — состоит из двух частей: типа токена (JWT) и используемого алгоритма подписи, например HMAC SHA256 или RSA.

Например:

{

"alg": "HS256",

"typ": "JWT"

}

Полезная нагрузка — содержит утверждения (claims). Утверждения — это утверждения о сущности (обычно пользователе) и дополнительные данные. Существует три типа утверждений: зарегистрированные, публичные и приватные.

Зарегистрированные утверждения: это предопределённый набор утверждений, которые не обязательны, но рекомендуются для обеспечения полезного и совместимого набора. Некоторые из них: iss (издатель), exp (время истечения), sub (субъект), aud (аудитория) и другие.

Публичные утверждения: могут быть определены по желанию теми, кто использует JWT. Однако, чтобы избежать конфликтов, они должны быть определены в реестре IANA JSON Web Token.

Приватные утверждения: это пользовательские утверждения, созданные для обмена информацией между сторонами, которые согласились их использовать, и они не являются ни зарегистрированными, ни публичными.

Пример полезной нагрузки:

{

"user_id": "4"

}

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

Например, если вы хотите использовать алгоритм HMAC SHA256, подпись будет создана следующим образом:

HMACSHA256(

base64UrlEncode(header) + "." +

base64UrlEncode(payload),

secret)

Подпись используется для проверки того, что сообщение не было изменено в процессе передачи, а в случае токенов, подписанных закрытым ключом, также подтверждает, что отправитель JWT является тем, за кого себя выдаёт.

Плагины для аутентификации:

Аутентификация, которая будет работать в удалённых приложениях.

Некоторые плагины для аутентификации:

OAuth 1.0a Server: Подключайте приложения к вашему сайту WordPress, не раскрывая пароль.

Этот плагин поддерживает только WordPress >= 4.4.

Application Passwords: Аутентифицируйте пользователя без предоставления его пароля напрямую, вместо этого вы будете использовать строку в кодировке base64, содержащую имя пользователя и новый пароль приложения.

JSON Web Tokens — Расширяет WP REST API, используя аутентификацию JSON Web Tokens в качестве метода авторизации.

WP User: Расширяет WP REST API, используя аутентификацию JSON Web Tokens (JWT) в качестве метода авторизации.

Плагин WP User помогает создать формы входа и регистрации на фронтенде сайта, а также создавать JWT-токены для WP REST API с дополнительными функциями безопасности, такими как ограничение попыток входа, регулярные выражения для паролей, чёрный/белый список IP-адресов и другие.

Если вам нужны вход или регистрация пользователей и вы хотите избежать стандартных страниц входа WordPress, этот плагин добавляет возможность размещения форм входа, регистрации и восстановления пароля с плавными AJAX-эффектами, а также поддерживает REST API.

https://wordpress.org/plugins/wp-user/

Заключение

WP RESTful API — это будущее для WordPress CMS, и наличие надёжного способа аутентификации пользователей — первое, что нужно учитывать. JWT — лучшее решение для аутентификации, особенно с помощью плагинов WP User или JSON Web Tokens.

5 июн. 2019 г. 07:11:30
2

Нет, то, что вы авторизованы на своем сайте WordPress, не означает, что вы авторизованы в WordPress API. Вам нужен JWT-токен.

4 апр. 2019 г. 10:27:41
Комментарии

Можешь объяснить это подробнее, @grazianodev? Или указать на соответствующие ссылки в документации.

conor909 conor909
2 дек. 2020 г. 00:40:36

Этот ответ ясно и полностью отвечает на вопрос, поэтому его следует принять.

Lumi Lumi
28 авг. 2022 г. 15:36:19