Mam wymaganie, w którym muszę zastąpić domyślne uwierzytelnianie użytkownika uwierzytelnieniem serwera centralnego, tj. Serwera SSO.
Debugując Drupala dowiedziałem się, że zarządzanie sesjami odbywa się w includes/session.inc
plikach. Chcę przeprowadzić uwierzytelnianie, jak pokazano na obrazku:
SCENARIUSZ: Zaloguj się
Szczegóły tych kroków to:
- Zastąp formularz logowania, aby podać nazwę użytkownika i hasło na serwerze SSO ( nie na Drupal , ale na .NET).
- Uwierzytelnij użytkownika na serwerze SSO przy użyciu bazy danych tej witryny; i odeślij odpowiedź na niestandardową stronę PHP mojej witryny (lub formularz przez moduł?).
- Korzystając z odpowiedzi, zidentyfikuj użytkownika w tabeli użytkowników i utwórz sesję dla tego użytkownika bez sprawdzania hasła (ponieważ oznaczałoby to podwójne uwierzytelnienie). Domyślnie Drupal ustawia plik cookie o nazwie
$insecure_session_name
zmiennej i wartości$sid
. Chcę, aby Drupal nie ustawiał tutaj pliku cookie, zamiast tego wysyłał wartości zmiennych do serwera SSO. - Serwer SSO pobierze wartości, utworzy plik cookie i upuści go w domenie głównej
domain.com
(aby to przypomniećmy website
isso server
znajduje się w subdomenie domeny głównej, która również nie znajduje się w Drupal). Następnie witryna Drupal może zalogować się przy użyciu tego pliku cookie.
Wiem, że to trudne pytanie, szukam tylko wskazówek, jak zacząć? jak mówią „nie należy rąbać rdzenia”. Tak więc moje pytania to:
- Gdzie powinienem znaleźć informacje na temat dogłębnego działania uwierzytelniania Drupal i zarządzania sesjami?
- Czy istnieje sposób, w jaki mógłbym wywoływać funkcje przy
includes/session.inc
użyciu haków (ponieważ komentarze do funkcji mówią „tylko do użytku wewnętrznego / nie do modyfikacji”)?
UWAGA: Będę używać tej samej metody do rejestracji użytkownika, aby rekord pozostał w centralnej bazie danych serwera SSO. I podczas tego wstawi jakieś śmieciowe hasło dla tego samego użytkownika w bazie danych strony Drupal (ponieważ hasło nie będzie sprawdzane podczas logowania).