Аутентификация в REST API
Я пытаюсь изучить WP REST API.
Я хочу создать запись.
Я использую приложение Postman.
Я получаю ошибку 401 при попытке выполнить POST-запрос (с GET всё работает нормально).
Но я думал, что входа в систему моего сайта на WordPress будет достаточно для аутентификации через cookies.

Ядро 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] при выполнении 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.

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