Интеграция SSO / аутентификации с внешней службой каталогов

Я собираюсь начать работу над прототипом для клиента – и одна из необходимых функций – интеграция с собственной системой аутентификации / регистрации пользователей.

Эта система будет действовать как авторитетная база данных пользователей и предоставляет интерфейс RESTful для создания новых пользователей и аутентификации действительных пользователей.

  1. Мне нужно иметь возможность создавать новых пользователей в WP и как часть этого процесса сделать вызов внешнему API аутентификации либо для создания, либо для проверки этого пользователя.

  2. Лицо, которое является действительным пользователем, но не знакомым с WP, должно иметь возможность входа в систему для комментариев, без необходимости регистрироваться на самом сайте WP.

  3. Пользователь, зарегистрированный на общем веб-сайте, также должен автоматически регистрироваться в WordPress.

Я думаю, что следующий путь.

  • Для (1) – есть ли крючок регистрации, который я могу использовать?

  • Для (2) – я предполагаю, что я подключаю фильтр проверки подлинности, то есть когда кто-то пытается войти в систему, я ловушка, сделаю вызов внешней системе, а затем либо обработаю вход в WP или перенаправляю его в процесс регистрации, где ( 1) принимает значение.

  • Для (3) – прочитайте файл cookie для входа, указанный основным сайтом, и продолжите (2)?

Думаю, мне также понадобится вставить запись в таблицу пользователей и usermeta.

Итак, имеет ли смысл вышеизложенное – разве я не думал о чем-то. У кого-то есть хорошие ресурсы для помощи в этом (@hakre – я видел, что вы проделали определенную работу над этим !!).

Обновить

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

  1. проверьте, установлен ли файл cookie для входа на «главный» сайт, и если это так, повторите проверку на их API проверки подлинности и, если он действителен, принудительно введите логин WP с помощью wp_signon() , используя информацию, содержащуюся в wp_signon() cookie основного сайта (электронная почта и hashed password) в качестве мандатов для WP
  2. если файл cookie не установлен, перенаправляйтесь на страницу входа в главный сайт и получаете либо регистрацию / регистрацию, а затем обратно на шаг 1
  3. если не существует пользователя WP, когда существует аутентифицированный пользователь мастер-сайта, создайте его, а затем «прозрачный» signon (т.е. пользователь не увидит форму входа в WP)

В принципе, я хочу скрыть форму входа в WP полностью для пользователей, которые просто будут комментировать, а затем найти способ разрешить авторам и администратору напрямую обращаться к нему.

Это происходит довольно медленно, вот что я могу использовать с помощью:

  • является ли фильтр подлинности правильным для использования? Кажется, что он не вызван во всех ситуациях, которые я ожидал бы – например, мета-виджет отображает входные / выходные ссылки без обхода подлинного крюка

  • Я могу получить wp_signon() чтобы вернуть объект WP_User (указывающий успех), но он не влияет на статус вошедшего в систему, т. е. мета-виджет все еще будет показывать «Вход» даже после обновления.

Любая помощь с благодарностью получила 🙂

Solutions Collecting From Web of "Интеграция SSO / аутентификации с внешней службой каталогов"

Хорошо, подход, который работает для меня, выглядит следующим образом:

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

  2. Получите файл cookie с основного сайта и повторите его проверку против API аутентификации основного сайта

  3. Если это допустимо, используйте адрес электронной почты из возвращаемого значения в качестве значения 'user_login' для WP и пароль хешированного сайта в качестве пароля WP.

  4. Проверьте, существует ли этот пользователь в WP с помощью wp_authenticate('user_login', 'user_pass') . Это возвращает объект WP_User при успешном выполнении или объект WP_Error при сбое.

  5. Если WP_Error/is_wp_error() , используйте wp_update_user() для создания пользователя (или обновите пользователя с измененным паролем).

  6. Войдите через wp_set_current_user() , wp_set_auth_cookie() и do_action('wp_login, id)

(Все это содержится в функции, связанной с действием 'init' )

Это, похоже, работает – действительные пользователи сайта, неизвестные WP, автоматически создаются. Изменения пароля учитываются, и если файл cookie сайта установлен и существует пользователь WP, SSO является автоматическим и довольно бесшовным.

Вся система аутентификации подключается. Я предлагаю посмотреть существующие плагины, чтобы получить представление о том, как переопределить систему. Возможно, посмотрев на некоторые плагины LDAP ?

Некоторые функции, связанные с пользователем, определяются условно на !function_exists() в wp-includes/pluggable.php и легко переопределяются с вашими собственными версиями.