Mniej więcej tym, co podałeś. Sporo zależy od Twoich potrzeb. Przykładowo, w jakimś prostym systemie oczywiste jest, że autoryzuje się po to, by kogoś zalogować, ale w dużych aplikacjach wcale nie musi to być prawda: autoryzacji możesz potrzebować też do innych celów lub też może istnieć kilka różnych mechanizmów logowania (zwykłe logowanie, odciski palców, itd.

). Wtedy tworzy się kilka różnych klas uwierzytelniania, które mają jednakowy interfejs, a następnie wykorzystuje je w jakimś miejscu, które coś z wynikiem dalej robi (np. tworzy sesję). Dzięki temu kod odpowiedzialny za tworzenie sesji zadziała bez względu na to, czy będzie dokonywać autoryzacji przy pomocy klasy uwierzytelniania "login i hasło" czy też "odciski palców".
Podam Ci przykład z systemu, nad którym właśnie siedzę. Mam tam dwie klasy uwierzytelniania:
- Logowanie z formularza - podajesz login i hasło. W odpowiedzi dostajesz profil użytkownika lub komunikat błędu.
- Uwierzytelnianie sesji - sprawdza, czy już istniejąca sesja wskazuje na właściwego użytkownika. W odpowiedzi dostajesz profil użytkownika lub komunikat błędu.
Korzystam z nich w dwóch miejscach:
1. Formularz logowania - związany jest z pierwszą klasą. Po przyjściu danych odpytuje on jej obiekt i dzięki temu określa, czy użytkownik wpisał poprawne dane czy nie.
2. Inicjowanie sesji - po załadowaniu sesji korzysta z drugiej klasy do sprawdzenia, czy i kto jest zalogowany. Jeśli ktoś jest, uzyskujemy jego profil, który zapamiętujemy, by cała strona mogła z tego korzystać.
Nic ciekawego tu na razie specjalnie nie ma, gdyż poza tym, że obie klasy mają wspólny interfejs, są generalnie niezależne. Ale zauważ, że niebawem będę chciał napisać np. moduł pamiętania sesji. Wtedy wystarczy, że napiszę sobie trzecią klasę uwierzytelniania i podłączę ją do drugiego przypadku, równolegle z już istniejącą klasą. Można sobie też wyobrazić, że będą jakieś miejsca wymagające dodatkowego logowania, aby zyskać jeszcze wyższe uprawnienia. Ponownie, mogę stworzyć następną klasę logowania i tym razem podłączyć ją pod formularz logowania, w którym nie będę musiał zmieniać ani jednej linijki kodu, by zaczął współpracować z nowym systemem uwierzytelniającym.
A teraz wyobraźmy sobie panel do konfigurowania zabezpieczeń, w którym mamy interfejs do składania takiej autoryzacji wizualnie. Jak chcemy w którymś miejscu utworzyć logowanie, to klikamy "Wstaw tu formularz logowania" i wybieramy klasę uwierzytelniającą, która z nim będzie współpracować, a system już sobie z tego poskłada resztę.
Tak więc w moim przypadku klas uwierzytelniania jest więcej, i w dodatku nawet nie zajmują się one specjalnie sesjami

.