Autoryzacja użytkowników w PHP

Autoryzacja użytkowników w PHP
Spis treści

Prędzej czy później w każdej aplikacji dochodzimy do momentu kiedy trzeba rozpoznawać użytkowników. Standardowo problem staramy się rozwiązać poprzez stworzenie kilku standardowych elementów jakimi są formularz rejestracji i logowania.

Bardzo modne ostatnio też są logowania przy pomocy innych usługodawców – czyli znana usługa Facebook for Websites  (wcześniej znana jako Facebook connect), logowanie przez konta Gmail , LinkedIn , Twitter czy w końcu OpenID , które było pierwsze, ale jakoś się nie przyjęło. Mamy więc do wyboru sporo alternatywnych metod logowania.

W przypadku własnego systemu autoryzacji związane jest to z mnóstwem dodatkowej pracy. Trzeba stworzyć funkcję do przypominania hasła, jeżeli użytkowników mamy jakoś sprawdzać to przydałoby się potwierdzenie kont email. Hasła w bazie trzeba “posolić”, dobrze jest też jakoś zabezpieczyć się przed nadmiernym użyciem funkcji “przypomnij hasło”. Można wprowadzić dodatkowe funkcje w postaci sekretnych pytań i odpowiedzi, dla rejestracji trzeba też zrobić

captcha , albo jakieś inne zabezpieczenie przed botami.

No cóż – pisanie takiej bibliteki samemu – naprawdę skomplikowana sprawa – biorąc pod uwagę aspekt bezpieczeństwa – ten moduł powinien być napisany bardzo… porządnie. Co więc możemy z tym zrobić?

Rozwiązania

Gotowe klasy – w przypadku CodeIgniter’a bardzo dobrym i prostym pomysłem jest Ion Auth , który zasadniczo stanowi kompleksowe rozwiązanie do autoryzacji użytkowników. Klasa łatwa do przetłumaczenia, prosta w obsłudze z gotowymi szablonami do wszystkiego. Jest przypominanie haseł, są emaile powitalne i potwierdzenia nowych kont. Wszystko fajnie, ale… nie mamy nic z zewnętrznych dostawców.

Bardziej uniwersalnym rozwiązaniem jest OpenID, które pozwali nam logować użytkowników nie tylko posiadających konta OpenID, ale też np. użytkowników Google i kilku innych popularnych dostawców. Polecam do tego klasę LightOpenId  – doskonale integruje się z każdym frameworkiem (w tym z CI) no i generalnie jest bardzo… lekka.

Na ciekawy pomysł wpadło też Google – Google Identity Toolkit  to API do logowania w serwisach przy pomocy nie tylko kont gmail, ale też AOL, hotmail i Yahoo – autorzy obiecują też innych operatorów. Trzeba jednak zaznaczyć dwie bardzo ważne sprawe – API jest darmowe do 1000 autoryzacji dziennie, no i może działać praktycznie tylko w oparciu o JavaScript (niezły pomysł – prawda?). Wszystko dzieje się po stronie  git’a – my dostajemy w wyniku unikalny hash użytkownika, albo informacje że autoryzacja się nie powiodła. Generalnie idea bardzo fajna, robiłem testy – działą bardzo dobrze. Szkoda tylko, że jest tak mało usługodawców, mam nadzieje że poszerzą API o pozostałych “wielkich”.

Ostatni projekt o którym chciałem napisać to HybridAuth  – bardzo dobrze zapowiadająca się klasa, która obsługuje praktycznie wszystkich operatorów. W fazie beta, trochę upierdliwa w konfiguracji ale… działa. Trzeba trochę się naklikać ale przy pomocy jednego zestawu klas i funkcji jesteśmy w stanie obsłużyć logowanie do serwisów praktycznie wszystkimi operatorami.