Настройка аутентификации WordPress через внешний API
Есть существующий не-WordPress сайт, и мне нужно, чтобы их пользователи могли входить на мой новый сайт WordPress, используя те же учетные данные, которые у них уже есть.
Мне предоставили конечную точку (www.example-api.com/token) и учетные данные для входа (email и пароль), которые возвращают токен (и другие детали) в качестве ответа.
Я читал про OAuth, и большинство ресурсов, которые я нахожу, описывают обратную ситуацию (вход на не-WordPress сайт с использованием учетных данных WordPress). У меня нет доступа к другому сайту, и я вижу, что там нужна настройка, так что, стоит ли мне отказаться от этого варианта?
Я натолкнулся на возможность переопределения wp_authenticate через пользовательский плагин, который я уже настроил, но я в замешательстве относительно того, что и КАК именно нужно сделать.
Есть ли какие-либо рекомендации или подсказки по этому поводу?

Обновление: Создал пост в блоге, чтобы объяснить это подробнее :)
Мне удалось реализовать это с помощью фильтра WP authenticate
внутри нового плагина; большая часть основана на этом руководстве от Бена Лобо. Основные моменты плагина:
- Создать функцию API-вызова с помощью cURL (если не знакомы, можно получить пример кода из Postman при тестировании).
- Добавить фильтр, проверяющий, что ответ от API подтверждает существование пользователя и его доступ (в моем случае — на основе роли).
- В том же фильтре проверить, есть ли у пользователя аккаунт на сайте WP — если нет, создать его через
wp_insert_user
. Для ясности: я использовал email и пароль, проверенные API, потому что WP требует зарегистрированного пользователя в своей базе. - Если пользователь уже есть в базе WP, убедиться, что его данные актуальны, используя
wp_update_user
. Это нужно для случаев, например, когда пользователь изменил свои данные на основном (не-WP) сайте. - Опционально добавить страницу настроек плагина. В моем случае я создал поле для URL запроса, следуя этому руководству от Бхарата Парика.

Итак, вы реализовали своего рода SSO, что действительно единственный правильный подход. Но фраза "если пользователь не существует, создайте учетную запись" звучит очень неправильно. Любая атака методом грубой силы в некотором масштабе может положить ваш WordPress

Можете объяснить подробнее? У меня сложилось впечатление, что мне нужно создавать локального пользователя WordPress, поскольку в руководстве, которому я следовал (первая ссылка), явно сказано: "WordPress требует, чтобы реальный пользователь (пользователь WordPress) присутствовал в базе данных WordPress для выполнения операций с этим пользователем."
Я создаю нового пользователя только если ответ API указывает на это, и регистрирую их, используя их email и пароль из API.

Возможно, это просто неточность в вашем описании или мое недопонимание, но звучит так, будто вы создаете пользователя при каждом запросе "проверки".

О, кажется, я понял... вы аутентифицируете пользователей WordPress через другой сайт. В таком случае ваша логика верна

Понял. Да, вероятно, дело в формулировке. Я отредактирую, чтобы сделать понятнее. Спасибо!

Спасибо! Я думаю, возможно, использовать этот подход. Как вы обрабатываете ситуацию, когда пользователь меняет пароль в не-WP приложении? Вы просто используете WP REST API для обновления?
