Jestem bardzo zdezorientowany trudnym żargonem dostępnym w sieci na temat OAUTH, OpenID i OPENID Connect. Czy ktoś może powiedzieć mi różnicę w prostych słowach.
Jestem bardzo zdezorientowany trudnym żargonem dostępnym w sieci na temat OAUTH, OpenID i OPENID Connect. Czy ktoś może powiedzieć mi różnicę w prostych słowach.
OpenID to protokół do uwierzytelniania , a OAuth służy do autoryzacji . Uwierzytelnianie polega na upewnieniu się, że facet, z którym rozmawiasz, jest rzeczywiście tym, za kogo się podaje. Autoryzacja polega na decydowaniu, co ten facet powinien mieć.
W OpenID uwierzytelnianie jest delegowane: serwer A chce uwierzytelnić użytkownika U, ale dane uwierzytelniające U (np. Nazwa i hasło U) są wysyłane na inny serwer , B, któremu ufa A (przynajmniej zaufanie do uwierzytelniania użytkowników). Rzeczywiście, serwer B upewnia się, że U jest rzeczywiście U, a następnie mówi A: „ok, to jest prawdziwe U”.
W OAuth autoryzacja jest delegowana: jednostka A uzyskuje od jednostki B „dostęp right ", które A może pokazać serwerowi S, aby uzyskać dostęp; W ten sposób B może dostarczyć tymczasowe, specyficzne klucze dostępu do A bez nadawania im zbyt dużej mocy. Możesz sobie wyobrazić serwer OAuth jako główny klucz w dużym hotelu; przekazuje pracownikom klucze, które otwierają drzwi do pomieszczeń, do których mają wejść, ale każdy klucz jest ograniczony (nie daje dostępu do wszystkich pomieszczeń); co więcej, klucze ulegają samozniszczeniu po kilku godzinach.
Do pewnego stopnia autoryzacja może zostać wykorzystana do pseudo-uwierzytelnienia na podstawie tego, że jeśli jednostka A uzyska od B klucz dostępu przez OAuth, i pokazuje go serwerowi S, a następnie serwer S może wywnioskować , że B uwierzytelnił A przed przyznaniem klucza dostępu. Dlatego niektórzy używają OAuth tam, gdzie powinni używać OpenID. Ten schemat może, ale nie musi, być pouczający; ale myślę, że to pseudo-uwierzytelnianie jest bardziej zagmatwane niż cokolwiek innego. OpenID Connect właśnie to robi: wykorzystuje OAuth w protokole uwierzytelniania. W analogii hotelu: jeśli spotkam rzekomego pracownika i ta osoba pokaże mi, że ma klucz, który otwiera mój pokój, to przypuszczam , że to prawdziwy pracownik, na podstawie tego, że nie dałby mu klucza, który otworzyłby mój pokój, gdyby nie był.
Wszystkie trzy pozwalają osobie podać swoją nazwę użytkownika / hasło (lub inne poświadczenia) do zaufanego organu zamiast do mniej zaufanej aplikacji.
Aby coś zrozumieć, spójrz na jego historię.
OpenID & OAuth rozwijał się na równoległych ścieżkach iw 2014 roku został włączony do OpenID Connect. W całej swojej historii OpenID i OAuth zezwalały aplikacji na używanie zaufanego urzędu do obsługi prywatnych danych logowania użytkownika. Podczas gdy OpenID pozwolił urzędowi na weryfikację tożsamości użytkownika, OAuth pozwolił mu przyznać ograniczony dostęp do danych użytkownika.
OpenID 1.0 (2006) pozwala aplikacji poprosić władze o dowód, że użytkownik końcowy jest właścicielem identyfikatora (adresu URL).
OpenID 2.0 (2007) robi to samo, ale dodaje drugi format tożsamości (XRI) i uelastycznia sposób, w jaki użytkownik końcowy określa tożsamość i uprawnienia.
OpenID Attribute Exchange 1.0 (2007) rozszerza OpenID 2.0, pozwalając aplikacji pobrać & informacje o profilu użytkownika końcowego wraz z uprawnieniami - oprócz weryfikacji tożsamości użytkownika końcowego.
OAuth 1.0 (2010) umożliwia użytkownikowi końcowemu przyznanie aplikacji ograniczonego dostępu do zasobów na serwerze innej firmy, którego właścicielem jest urząd.
OAuth 2.0 (2012) robi to samo co OAuth 1.0, ale z zupełnie nowym protokołem.
OpenID Connect (2014) łączy funkcje OpenID 2.0, OpenID Attribute Exchange 1.0 i OAuth 2.0 w jednym protokole. Pozwala aplikacji na użycie uprawnień ...
Wiele osób nadal to odwiedza, więc oto bardzo prosty schemat, aby to wyjaśnić.
Mamy już diagram i wiele dobrych danych, więc oto przykład na wypadek, gdyby był pomocny.
Powiedzmy, że chcę opublikować komentarz do StackOverflow. StackOverflow zezwala na komentarze tylko wtedy, gdy użytkownik ma 50 punktów reputacji.
StackOverflow musi autoryzować to żądanie (np. Zezwolić na to tylko wtedy, gdy użytkownik ma> = 50 powtórzeń). StackOverflow nie użyje do tego OAuth, ponieważ StackOverflow jest właścicielem chronionego zasobu. Gdyby StackOverflow próbował opublikować komentarz na Facebooku w imieniu użytkownika, użyłby protokołu OAuth. Zamiast tego StackOverflow użyje lokalnej autoryzacji (np. if (user.reputation < 50) throw InsufficientReputationError ();
)
Aby to zrobić, StackOverflow musi najpierw wiedzieć, kto tworzy żądanie. Innymi słowy, aby autoryzować żądanie, musi najpierw uwierzytelnić żądanie.
StackOverflow najpierw sprawdza sesję i nagłówki HTTP, aby sprawdzić, czy użytkownik może zostać szybko uwierzytelniony ( np. nie jest to ich pierwsze żądanie), ale to się nie udaje.
Załóżmy, że StackOverflow zdecydował się na użycie OpenID Connect. Oznacza to, że StackOverflow ufa dostawcy tożsamości. Jest to usługa, której ufa StackOverflow, która może powiedzieć StackOverflow, kim jest bieżący użytkownik. W tym przykładzie założymy, że to Google.
StackOverflow pyta teraz Google, kim jest aktualny użytkownik. Jednak Google musi najpierw upewnić się, że StackOverflow może wiedzieć, kto jest aktualnym użytkownikiem. Innymi słowy, Google musi autoryzować StackOverflow. Ponieważ Google jest właścicielem chronionego zasobu, a StackOverflow jest tym, który uzyskuje do niego dostęp, możemy tutaj użyć OAuth. W rzeczywistości OpenID Connect to wymusza.
Oznacza to, że StackOverflow musi uwierzytelnić się na serwerze autoryzacji, któremu ufa Google (w rzeczywistości byłby to również Google, ale nie musi to mieć miejsca) i uzyskać token dostępu . Pobiera ten token dostępu do Google i pyta o tożsamość użytkownika. Następnie Google zwraca tożsamość użytkownika (podpisując tożsamość po drodze), a StackOverflow autoryzuje żądanie teraz, gdy zna tożsamość użytkownika.
W przypadku, gdy go przegapiłeś, było wiele kroków uwierzytelniania i autoryzacji.
Był to wcześniejszy protokół, który umożliwiał dostawcy tożsamości (np. Google) przekazywanie informacji o użytkowniku do usługi (takiej jak StackOverflow). Jednak użył innej metody (nie OAuth) dla Google, aby zezwolić StackOverflow na dostęp do tożsamości użytkownika. OpenID miał pewne luki w zabezpieczeniach (które, jak sądzę, zostały naprawione), ale moim zdaniem prawdziwym zabójcą był po prostu fakt, że OAuth miał lepszą obsługę i dlatego był mniej pracochłonny niż nauka niestandardowego protokołu OpenID.
Na dzień dzisiejszy dziś wszyscy go porzucają. Nie używaj tego. Użyj OpenID Connect.
W scenariuszu, który opisałem powyżej, protokół OAuth jest używany dokładnie tak, jak jest przeznaczony do autoryzacji. Istnieje jednak inny przepływ pracy, który często może mylić ludzi. Wynika to z tego, że w wielu sytuacjach (w większości?) Serwer udostępniający tożsamość użytkownika i serwer autoryzacji OAuth są tym samym serwerem.
W tym przypadku wydaje się trochę przesadą, że żądanie HTTP jest najpierw wysyłane do serwer autoryzacyjny, aby uzyskać token dostępu, a następnie ponownie skierowany do tego samego serwera, aby uzyskać token tożsamości. Dlatego dla specyfikacji OAuth utworzono rozszerzenie, aby umożliwić serwerowi autoryzacji powiązanie informacji o tożsamości użytkownika z tokenem dostępu.
Umożliwia to uwierzytelnianie w całości w przeglądarce (np. StackOverflow serwery nie muszą być zaangażowane). Jednak ten rodzaj uwierzytelniania jest mniej przydatny i (myślę?) Jest rzadziej używany.
Oprócz innych odpowiedzi: myślę, że wiele nieporozumień wynika z niedokładnego lub co najmniej nietypowego użycia terminów Uwierzytelnianie i Autoryzacja
OpenID Connect 1.0 jest sprzedawany jako rozwiązanie uwierzytelniania , podczas gdy samo w sobie nie obsługuje uwierzytelniania. „Prawdziwe” uwierzytelnianie w jego podstawowym znaczeniu (proces sprawdzania poświadczeń użytkownika w celu potwierdzenia tożsamości ) jest poza zakresem OpenID Connect.
OpenID Connect powinien być lepiej sprzedawany jako protokół federacji , umożliwiający stronie ufającej korzystanie z istniejącego procesu uwierzytelniania, bazy danych użytkowników i obsługi sesji od zewnętrznego dostawcy identyfikatorów. To jest funkcjonalnie podobne do SAML 2.0.
Uwaga: ściśle mówiąc, z punktu widzenia Strony ufającej, uzyskanie i zweryfikowanie tokena identyfikatora od dostawcy identyfikatora można uznać za metodę uwierzytelniania. Myślę, że stąd pochodzi „OpenID Connect jest protokołem uwierzytelniania”.
To samo uzasadnienie dla OAuth 2.0 jako protokołu autoryzacji : zazwyczaj autoryzacja jest procesem definiowania zasady dostępu określające, którzy użytkownicy mają dostęp do jakich zasobów. Ta definicja prawie nie dotyczy protokołu OAuth.
OAuth 2.0 w rzeczywistości umożliwia użytkownikom zezwolenie aplikacji / klientowi na dostęp do ich własnych zasobów w ich imieniu. Innymi słowy, OAuth 2.0 upoważnia aplikacje klientów , a nie użytkowników, do uzyskiwania dostępu do zasobów. Polityka autoryzacji (udzielanie dostępu użytkownikom do zasobów) powinna istnieć przed wdrożeniem OAuth.
Nazwałbym OAuth protokołem delegowania dostępu .
Przepraszam, jeśli ten post jeszcze bardziej zwiększy zamieszanie :)
Jak już wspomniano, Oauth to jedno, OpenID to drugie, a OpenID Connect łączy oba.
Ale, jak już wspomniano, stosowanie uwierzytelniania i autoryzacji w celu rozróżnienia Oauth i OpenID jest po prostu błędne. Uwierzytelnianie, potwierdzenie prawdziwości roszczenia jednostki do przechowywanej tożsamości, jest przypisywane do OpenID, ale jest ostatecznie częścią procesu Oauth. Autoryzacja, zezwolenie na dostęp do określonego zasobu lub kontenera, jest przypisywana Oauth, ale jest definitywnie częścią procesu OpenID.
Z mojego doświadczenia wynika, że prawdziwą różnicę między Oauth i OpenID można zobaczyć w typowym - wykonywane czynności związane z uwierzytelnianiem i przez kogo w ramach każdego schematu.
OpenID Connect umożliwia użytkownik uzyskuje dostęp do adresu internetowego, a po wejściu zapewnia bazowej aplikacji internetowej sposób na pobranie dodatkowych zasobów znajdujących się poza witryną w imieniu użytkownika.
Podsumowując: OpenID Connect to federacyjny interfejs API tożsamości, który zawiera profil i rozszerzenie OAuth 2.0, które umożliwia klientowi (np. aplikacji mobilnej lub witrynie internetowej) przekierowanie osoby do centralnego dostawcy tożsamości w celu uwierzytelnienia i umożliwia tej osobie autoryzować udostępnienie informacji temu klientowi.
Przeczytaj mój blog OAuth vs. SAML vs. OpenID Connect : https://gluu.co/oauth- saml-openid
OpenID Connect API zawiera kilka punktów końcowych, nie wszystkie związane z OAuth:
Punkty końcowe OAuth
.well-known / openid-configuration
, w tym lokalizacja punktów końcowych, obsługiwane algorytmy kryptograficzne, oraz inne informacje potrzebne klientowi do interakcji z OP. (RFC 8414) Punkty końcowe bez OAuth