Autoryzacja to nie uwierzytelnianie
2.0 odpowiada na pytanie „czy ta aplikacja jest upoważniona do dostępu do tego zasobu w imieniu użytkownika?”. To protokół autoryzacji i celowo nie mówi nic standardowego o tym, kim jest użytkownik. Mimo to aplikacje próbowały używać go ponownie do logowania, w sposób niezgodny i czasem niebezpieczny. OpenID Connect () to standard, który to naprawia: cienka warstwa tożsamości na OAuth 2.0, dodająca uwierzytelnianie bez odrzucania niczego, co OAuth już robi.
Token ID
Definiującym dodatkiem jest token ID i jest to . Podczas gdy token dostępu OAuth jest przeznaczony dla API i często nieprzejrzysty dla klienta, token ID jest przeznaczony dla klienta i niesie standardowe oświadczenia o uwierzytelnionym użytkowniku:
iss(wystawca) iaud(odbiorca, klient, dla którego go wydano)sub(stabilny, unikalny identyfikator użytkownika)expiiat(wygaśnięcie i czas wydania)nonce(wiąże token z konkretnym żądaniem logowania i pokonuje powtórzenie)- oświadczenia profilowe jak
name,emailipicture, gdy te zakresy są przyznane
Ponieważ to JWT, klient weryfikuje podpis tokenu ID i waliduje te oświadczenia dokładnie tak, jak opisano dla każdego JWT. Obowiązują te same kontrole ustalania algorytmu oraz aud/iss/exp.
Jak przebiega logowanie
OIDC ponownie wykorzystuje mechanizm OAuth. Zalecanym przepływem jest przepływ kodu autoryzacji z :
- Aplikacja wysyła użytkownika do punktu autoryzacji dostawcy, żądając zakresu
openid(plusprofile,emailitd.) i dołączając PKCEcode_challenge. - Użytkownik uwierzytelnia się i wyraża zgodę u dostawcy.
- Aplikacja otrzymuje jednorazowy kod i wymienia go (dowodząc posiadania PKCE
code_verifier) na token ID i token dostępu. - Aplikacja weryfikuje token ID, by ustalić, kim jest użytkownik, i używa tokenu dostępu do wywoływania API w jego imieniu.
Dwa punkty końcowe dopełniają obraz: punkt userinfo zwraca oświadczenia profilowe dla ważnego tokenu dostępu, a dokument odkrywania pod /.well-known/openid-configuration ogłasza punkty końcowe dostawcy i jego adres , dzięki czemu klient może znaleźć klucze do weryfikacji tokenów ID i automatycznie śledzić rotację kluczy.
Dlaczego to ważne
OIDC to to, na czym faktycznie działa większość przycisków „Zaloguj się przez ...”. Rozdzielanie dwóch tokenów to kluczowy wgląd: token ID dowodzi tożsamości klientowi, token dostępu autoryzuje wywołania API i nie są wymienne. W połączeniu z przepływem kodu i PKCE to nowoczesny, oparty na standardach sposób logowania federacyjnego.
Narzędzie PKCE generuje i weryfikuje code_verifier i code_challenge przepływu, a narzędzie JWT dekoduje i weryfikuje token ID, oba w całości w przeglądarce, bez wysyłania czegokolwiek.