Labs · AAuth
Аутентификация WordPress без внешнего провайдера
AAuth выдаёт и проверяет JWT-токены силами самого сайта: источник истины по пользователям остаётся в таблице wp_users, отдельный Identity Provider не нужен.
Что умеет
Что работает в версии 0.1.0
Выдача JWT на RS256: пара ключей генерируется при активации, секрет настраивать не нужно.
Refresh-сессии с ротацией токенов и отзывом — выключены по умолчанию, включаются флагом.
Вход по ссылке из письма (magic link) с одноразовым погашением токена — тоже опция.
Список разрешённых origin для CORS с точным совпадением и корректным preflight.
Режим совместимости с jwt-authentication-for-wp-rest-api: старые клиенты продолжают ходить на прежний маршрут.
Команда `wp aauth doctor` и публичный JWKS для проверки конфигурации.
Для кого
Когда это нужно
Мобильное приложение или скрипт
Клиенту нужен Bearer-токен к REST API WordPress и ничего больше.
Фронтенд на своём домене
JS-приложение ходит в WordPress напрямую, и нужен список разрешённых origin вместо звёздочки в CORS.
Переезд с JWT-плагина
Существующие клиенты остаются на прежнем маршруте, выпуск токенов переезжает на AAuth.
Вход без пароля
Сценарий «пришлите ссылку на почту» с тем же выпуском токенов, что и обычный вход.
Как поставить
Установка и настройка
-
01
Требования: WordPress 6.4 и PHP 8.1 или новее.
-
02
Поставить плагин из репозитория и активировать — при активации создаются таблицы сессий, аудита и magic-ссылок и генерируется пара ключей.
-
03
Переменные окружения и константы `wp-config.php` старше настроек в админке: заданное там поле становится доступным только для чтения.
-
04
Проверить конфигурацию: `wp aauth doctor` и запрос к `/wp-json/aauth/v1/.well-known/jwks.json`.
Статус
Версия 0.1.0 и её границы
Ядро выпущено и покрыто тестами и интеграционным прогоном. Ниже — то, чего в плагине пока нет; это цели дорожной карты, а не возможности сегодняшней версии.
Вход через социальные сервисы не реализован.
Режим OIDC-провайдера не реализован.
Отдельного headless-режима CMS нет.
Выпуск и обновление токена по обычному HTTP заблокированы везде, кроме локальных и тестовых окружений.