Pomoc zdalna
  • tag
  • authelia proxy
Pexels, cottonbro studio
Tag

#authelia proxy

Authelia sprawdza tożsamość zanim żądanie dotrze do aplikacji, więc program za nią może nie mieć własnego logowania. Opis mechanizmu, nagłówków i błędów konfiguracji.

1 wpis z tym tagiem

Authelia różni się od logowania wbudowanego w program tym, że nie należy do żadnego programu. Stoi obok odwrotnego proxy i odpowiada mu na jedno pytanie zadawane przy każdym żądaniu: wpuścić czy odesłać do formularza. Aplikacja za tą warstwą może nie mieć własnego ekranu logowania i nadal być zamknięta na klucz.

Portier w holu, nie zamek w drzwiach biura

Budynek biurowy da się zabezpieczyć dwoma sposobami. Pierwszy to zamek w drzwiach każdego biura z osobna, co oznacza tyle kompletów kluczy, ile pokoi, i tyle list uprawnionych, ile zamków. Drugi to portier w holu, który sprawdza wszystkich raz przy wejściu i przepuszcza dalej, a drzwi wewnątrz mogą zostać otwarte.

Ten drugi układ opisuje sposób pracy Authelii. Cała weryfikacja odbywa się w jednym miejscu, przed wejściem, a programy stojące głębiej dostają ruch już sprawdzony. Konsekwencja jest taka sama jak w budynku: kto wejdzie do środka inną drogą niż przez hol, minie portiera i nikt tego nie zauważy.

Przebieg pojedynczego żądania

Krok pierwszy: przeglądarka pyta o adres chroniony, a odwrotne proxy zatrzymuje żądanie i wysyła zapytanie pomocnicze pod adres weryfikujący. W konfiguracji serwera nginx robi to moduł podzapytań, w Traefiku pośrednik nazwany wprost uwierzytelnianiem przekazywanym, a zasada jest ta sama w Caddym, Envoyu i HAProxy.

Krok drugi: zapytanie pomocnicze niesie ze sobą metodę, adres docelowy i ciasteczka klienta, ale nie treść żądania. Zawartość formularza czy przesyłanego pliku nigdy nie przechodzi przez warstwę uwierzytelniania.

Krok trzeci: odpowiedź jest krótka. Kod sukcesu oznacza przepuszczenie i doklejenie do żądania nagłówków z nazwą użytkownika oraz jego grupami. Kod odmowy oznacza przekierowanie do portalu logowania, gdzie użytkownik podaje hasło i drugi składnik, na przykład kod jednorazowy albo klucz sprzętowy.

Krok czwarty: po zalogowaniu powstaje sesja zapisana w ciasteczku wystawionym na domenę nadrzędną, dzięki czemu obejmuje wszystkie usługi w jej obrębie. Ciasteczko jest przesyłane wyłącznie po szyfrowanym połączeniu, więc adres bez certyfikatu tej konstrukcji nie utrzyma.

Warstwa uwierzytelniania, proxy i pełny dostawca tożsamości

Odwrotne proxy przyjmuje połączenia i rozdziela je między usługi, ale samo nie ma pojęcia, kim jest pytający. Authelia to pojęcie dostarcza i nic więcej nie robi: nie kończy szyfrowania, nie równoważy obciążenia, nie zna zawartości ruchu.

Z drugiej strony stoją rozbudowane serwery tożsamości, w których każda aplikacja jest osobno zarejestrowanym klientem, przechodzi przez protokoły federacyjne i sama obsługuje sesję. Authelia potrafi też wystąpić w tej roli, bo ma wbudowanego dostawcę OpenID Connect, jednak jej właściwym zastosowaniem jest przypadek odwrotny: zamknięcie programu, który nigdy nie miał żadnego logowania i nigdy go mieć nie będzie.

Gdzie taka warstwa zarabia na siebie

Typowe miejsce to zestaw narzędzi wewnętrznych utrzymywanych na własnym serwerze: panel monitorowania, interfejs kopii zapasowych, wykresy, kolejka zadań, panel routera. Każde z nich ma inny pomysł na konta, część ma jedno hasło współdzielone przez zespół, a część nie ma nic i liczy na to, że nikt nie zna adresu.

Postawienie przed nimi wspólnego portalu daje jedną listę osób, jeden komplet reguł mówiących, kto do czego wchodzi, i drugi składnik przy logowaniu do wszystkiego naraz, także tam, gdzie producent programu drugiego składnika nie przewidział. Osoba odchodząca z firmy traci dostęp w jednym miejscu, a nie w dziewięciu panelach.

Nagłówek, któremu aplikacja wierzy na słowo

Program za tą warstwą czyta nazwę użytkownika z nagłówka doklejonego przez proxy i traktuje ją jako pewnik. Dopóki jedyną drogą do programu jest proxy, to działa. Kiedy ten sam program nasłuchuje jednocześnie na porcie widocznym w sieci lokalnej albo wystawionym na zewnątrz przez przekierowanie portu, dowolna osoba może wysłać żądanie z takim nagłówkiem wpisanym własnoręcznie i przedstawić się jako administrator.

Druga właściwość dotyczy dostępności. Portal staje się wspólnym punktem awarii wszystkich usług naraz, więc jego przewrócenie zamyka dostęp do rzeczy, które same działają bez zarzutu. Sesje przechowywane w pamięci procesu znikają przy każdym restarcie, a magazyn na plik lokalny wystarcza do testów i nie wystarcza do konfiguracji z kilkoma egzemplarzami usługi.

Trzecia rzecz to reguły dostępu. Zapisane w pliku konfiguracyjnym, rozstrzygane w kolejności od góry, potrafią po kilku miesiącach zawierać wpis otwierający wszystko, dopisany kiedyś dla jednej wtyczki i zapomniany.

Kiedy ta konstrukcja jest przerostem

Aplikacja z dojrzałym własnym systemem kont, uprawnieniami przypisanymi do ról i drugim składnikiem nie zyskuje nic poza kolejnym ekranem do przeklikania. Dublowanie logowania utrudnia też pracę klientom mobilnym i integracjom, bo one nie potrafią przejść przez formularz w przeglądarce.

Nie jest to również sposób na udostępnienie usługi klientom z zewnątrz. Authelia zakłada zamknięty krąg osób opisanych w katalogu albo w pliku, a nie samodzielną rejestrację i obsługę tysięcy kont. Do tego służą inne narzędzia.

Tomasz Kaczmarek
Tomasz Kaczmarek

Mogę Ci jakoś pomóc?