Musiałem się w to zagłębić z własnych powodów i napisałem, więc opublikuję tutaj, czego się nauczyłem ...
Najpierw odpowiem na pytanie, ryzykując stwierdzenie oczywistego: tokenowi ID nie można ufać, a jego zawartość należy zignorować, jeśli aktualny czas jest dłuższy niż czas, który upłynął. W odpowiedzi pytającego stwierdza się, że po wstępnym uwierzytelnieniu użytkownika token ID nie jest ponownie używany. Ponieważ jednak token identyfikatora jest podpisany przez dostawcę tożsamości, z pewnością przydatne w dowolnym momencie może być udostępnienie sposobu niezawodnego określenia, kim jest użytkownik, do innych usług, z których może korzystać aplikacja. Używanie prostego identyfikatora użytkownika lub adresu e-mail nie jest niezawodne ponieważ można go łatwo sfałszować (każdy może wysłać adres e-mail lub identyfikator użytkownika), ale ponieważ token OIDC ID jest podpisany przez serwer autoryzacji (który zwykle ma również tę zaletę, że jest stroną trzecią), nie można go sfałszować i jest znacznie bardziej niezawodny mechanizm uwierzytelniania.
Na przykład aplikacja mobilna może chcieć móc powiedzieć usłudze wewnętrznej bazy danych, kim jest użytkownik, który korzysta z aplikacji, i może to zrobić po krótkim okresie po początkowym uwierzytelnieniu, w którym to momencie wygasł identyfikator tokenu, w związku z tym nie może służyć do wiarygodnego uwierzytelnienia użytkownika.
Dlatego tak jak token dostępu (służący do autoryzacji - określając jakie uprawnienia posiada użytkownik) można odświeżyć, czy można odświeżyć ID Token (służący do uwierzytelniania - określając, kim jest użytkownik)? Zgodnie ze specyfikacją OIDC odpowiedź nie jest oczywista. W OIDC / OAuth istnieją trzy „przepływy” do pobierania tokenów, przepływ kodu autoryzacji, przepływ niejawny i przepływ hybrydowy (które pominę poniżej, ponieważ jest to wariant dwóch pozostałych).
W przypadku niejawnego przepływu w OIDC / OAuth żądasz tokenu identyfikatora w punkcie końcowym autoryzacji, przekierowując użytkownika w przeglądarce do punktu końcowego autoryzacji i dołączającid_token
jako wartość response_type
parametru żądania. Niejawny Przepływ pomyślnym uwierzytelnieniu Response jest zobowiązany do obejmują id_token
.
W przypadku przepływu kodu uwierzytelniania klient określa code
jako wartość response_type
parametru żądania podczas przekierowywania użytkownika do punktu końcowego autoryzacji. Pomyślna odpowiedź zawiera kod autoryzacji. Klient wysyła żądanie do punktu końcowego tokena z kodem autoryzacyjnym i, zgodnie z OIDC Core Section 3.1.3.3 Successful Token Response, odpowiedź MUSI zawierać ID Token .
Tak więc w przypadku obu przepływów początkowo otrzymujesz token identyfikatora, ale jak go odświeżyć? Rozdział 12 OIDC: Używanie tokenów odświeżania zawiera następującą instrukcję dotyczącą odpowiedzi tokenu odświeżania:
Po pomyślnym sprawdzeniu poprawności tokenu odświeżania treść odpowiedzi jest odpowiedzią tokenu z sekcji 3.1.3.3, z tą różnicą, że może nie zawierać tokenu id_token .
To nie może zawierać identyfikator token, a ponieważ nie ma sposobu, aby zmusić go określono zawierać znacznik ID, należy założyć, że odpowiedź nie będzie zawierać identyfikator token. Z technicznego punktu widzenia nie ma więc określonego sposobu „odświeżenia” tokena identyfikatora za pomocą tokena odświeżania. Dlatego jedynym sposobem uzyskania nowego tokena identyfikatora jest ponowna autoryzacja / uwierzytelnienie użytkownika przez przekierowanie użytkownika do punktu końcowego autoryzacji i uruchomienie niejawnego przepływu lub przepływu kodu uwierzytelniającego, jak opisano powyżej. Specyfikacja OIDC dodaje prompt
parametr żądania do żądania autoryzacji, więc klient może zażądać, aby serwer autoryzacji nie monitował użytkownika za pomocą żadnego interfejsu użytkownika, ale przekierowanie nadal musi nastąpić.