Pytanie:
Różnica między OAUTH, OpenID i OPENID Connect w bardzo prosty sposób?
user960567
2013-10-29 18:31:05 UTC
view on stackexchange narkive permalink

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.

Dobre porównanie patrz https://spin.atomicobject.com/2016/05/30/openid-oauth-saml/
Zobacz też: https://security.stackexchange.com/q/133065/2113
Siedem odpowiedzi:
Thomas Pornin
2013-10-29 18:52:10 UTC
view on stackexchange narkive permalink

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ł.

Wielkie dzięki. Czy możesz to po prostu wyjaśnić w żargonie angielskim zamiast żargonu serwerowego. Podoba mi się przykład hotelu. Ale do wyjaśnienia OPENID (pierwszy akapit) używasz słowa serwera
„Serwer” oznacza tutaj „komputer, który znajduje się w jakimś pomieszczeniu i oczekuje na przepływ danych przez sieć, a następnie odpowiada na nie”. To nie jest _jargon_.
@user960567 w pewnym momencie nie można już tak naprawdę destylować szczegółów lub pomysłów, zmieniając `` żargony '', szczególnie gdy zajmujemy się złożonymi tematami, takimi jak uwierzytelnianie, autoryzacja lub delegacja.
@ThomasPornin: Czy nie powiedziałbyś, że OAuth dotyczy autoryzacji ORAZ uwierzytelniania? Ponieważ uwierzytelnianie jest zawsze podstawą udanej autoryzacji, prawda? Chociaż w twoim przykładzie OAuth (przynajmniej w typie autoryzacji) uwierzytelnianie odbywa się na serwerze jednostki B, gdzie autoryzacja odbywa się na serwerze S. Prawda?
@ThomasPornin, Hej, ekspert, sprawdź to, istnieje wiele nieporozumień, http://security.stackexchange.com/questions/44843/how-secure-is-redirecting-user-from-http-normal-bank-com-to -https-secure-ban / 44880? noredirect = 1 # 44880
@ThomasPornin, klucz do pokoju hotelowego jest analogiczny do tokena dostępu / okaziciela OAuth 2; nie jest analogiczny do tokena OpenID Connect ID.
Wydaje się, że to rozróżnienie: „OpenID jest protokołem uwierzytelniania, podczas gdy OAuth służy do autoryzacji” nie jest już ważne. Google używa teraz OAUTH 2.0 zarówno do uwierzytelniania, jak i autoryzacji (https://developers.google.com/accounts/docs/OAuth2Login)
@GayanSanjeewa I [teraz nie są] (https://developers.google.com/accounts/docs/OpenID#shutdown-timetable).
OK, więc A to konsument, a B to dostawca identyfikatorów. Co to jest serwer S?
@BenV zgodnie z połączoną stroną, Google korzysta teraz TYLKO z funkcji OAuth 2.0 w ramach OpenID Connect.Przestali wspierać OpenID 2.0 na korzyść OAuth 2.0 tylko dlatego, że najnowsza wersja OpenID obsługuje OAuth, bez wyjaśniania użytkownikowi widocznych ogromnych różnic, które wciąż próbuję zrozumieć.To wydaje się sugerować, że OpenID sam w sobie nie jest już używany?
Zgodnie z [linkiem] (https://developers.google.com/accounts/docs/OpenID#shutdown-timetable) podanym przez BenV, OpenID Connect nie obsługuje już nawet oddzielnego protokołu OpenID.Zamiast tego jest to warstwa pseudo-uwierzytelniania zbudowana w całości w oparciu o OAuth 2.0, wymagająca od użytkownika udostępnienia witrynie np.Konto Google i umożliwienie obu stronom monitorowania aktywności użytkowników drugiej.Czy to prawda??Czy OpenID istnieje już jako oddzielny protokół?
Tak więc OpenID pozwala użytkownikom logować się za pomocą innej usługi.OAuth polega na umożliwieniu niektórym serwerom wykonywania czynności w Twoim imieniu.Dobrze?W pewnym sensie wydają się zmierzać w przeciwnych kierunkach.
Świetne wyjaśnienie!Używałem OAuth do uwierzytelnienia.Uratowałeś mój dzień człowieku!
Shaun Luttin
2016-07-19 00:34:13 UTC
view on stackexchange narkive permalink

Proste terminy

  1. OpenID dotyczy weryfikacji tożsamości osoby (uwierzytelnianie).
  2. OAuth dotyczy uzyskiwania dostępu rzeczy osoby (autoryzacja).
  3. OpenID Connect robi jedno i drugie .

Wszystkie trzy pozwalają osobie podać swoją nazwę użytkownika / hasło (lub inne poświadczenia) do zaufanego organu zamiast do mniej zaufanej aplikacji.

Więcej szczegółów

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).

  • Użytkownik końcowy aplikacji: nazywam się Steve A. Smith.
  • Aplikacja do organu: Czy to jest Steve A. Smith?
  • Użytkownik końcowy i upoważnienie przemawiają w imieniu chwilę.
  • Uprawnienia do aplikacji: tak, to jest Steve A. Smith.

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.

  • Użytkownik końcowy do aplikacji: Nazywam się Steve A. Smith.
  • Aplikacja do organu: Czy to jest Steve A. Smith? Och, a jeśli tak, podaj mi również jego adres e-mail i numer telefonu.
  • Na chwilę przemówią użytkownicy końcowi i władze.
  • Uprawnienia do aplikacja: Tak, to jest Steve A. Smith. Jego e-mail to steve@domain.com, a numer telefonu to 123-456-7890.

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.

  • Aplikacja dla użytkownika końcowego: Chcielibyśmy uzyskać dostęp do Twoich zdjęć na innym serwerze.
  • Końcowy użytkownik i władza mówią przez chwilę.
  • Uprawnienia do aplikacji: Oto token dostępu.
  • Aplikacja do serwera innej firmy: Oto token dostępu, który potwierdza, że ​​mam dostęp do zdjęć dla użytkownika końcowego.

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ń ...

  1. w celu zweryfikowania tożsamości użytkownika końcowego,
  2. pobranie informacji z profilu użytkownika końcowego oraz
  3. aby uzyskać ograniczony dostęp do rzeczy użytkownika końcowego.
Dzięki za tę wspaniałą odpowiedź, Shaun.Perspektywa historyczna i łatwe do odczytania scenariusze wyjaśniają wiele nieporozumień.
OAuth 2.0 nie działa tak samo jak OAuth 1.0, ponieważ OAuth 1.0 zapewnia zarówno uwierzytelnianie, jak i autoryzację przed użyciem zasobu, podczas gdy OAuth 2.0 zapewnia tylko autoryzację.W OAuth 1.0 każde żądanie jest podpisywane za pomocą wstępnie wynegocjowanego tajnego klucza współdzielonego między klientem a serwerem, a zatem każde żądanie jest uwierzytelniane (z powodu procesu podpisywania) i autoryzowane (ponieważ użytkownik autoryzował token).Chociaż w przypadku OAuth 2 może tak nie być - możesz mieć implementacje, w których posiadanie tylko tokena dostępu wystarczy, aby uzyskać dostęp do zasobów (bez uwierzytelniania).
Vrashabh Irde
2014-05-19 13:39:16 UTC
view on stackexchange narkive permalink

Wiele osób nadal to odwiedza, więc oto bardzo prosty schemat, aby to wyjaśnić.

OpenID_vs._pseudo-authentication_using_OAuth

Dzięki uprzejmości Wikipedii

Dlaczego ktoś nie mógł złapać certyfikatu w uwierzytelnianiu OpenID i udawać uwierzytelnionego użytkownika?
@ptf Brzmi jak osobne pytanie!
@ptf Jeśli mogą uzyskać do niego dostęp, to oczywiście mogą.Token OAuth i, cóż, * dowolna * forma tokena dostępu mogą być oczywiście używane przez stronę trzecią, która uzyskała do niego dostęp.Serwer powiedział, że w każdym przypadku może próbować zastosować heurystykę (np. Geolokalizację, zachowanie dostępu), aby potwierdzić, że może to być złośliwy aktor i wygasnąć sesję lub wymusić asercję MFA.
Pace
2018-03-13 02:34:12 UTC
view on stackexchange narkive permalink

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.

  • StackOverflow podjął próbę uwierzytelnienia żądania przy użyciu plików cookie sesji, ale to się nie powiodło.
  • StackOverflow następnie uwierzytelnił żądanie przy użyciu OpenID Connect
  • Google autoryzował żądanie tożsamości SO przy użyciu protokołu OAuth
  • Serwer autoryzacji uwierzytelniony StackOverflow (prawdopodobnie przy użyciu identyfikatora klienta & client secret).
  • Ponadto w ramach przepływu pracy OAuth serwer autoryzacji mógł uwierzytelnić żądanie, prosząc użytkownika o podanie nazwy użytkownika & hasło.
  • Ponadto sam użytkownik mógł autoryzować żądanie tożsamości przez SO, odpowiadając na przyznanie ekran (np. „czy chcesz zezwolić StackOverflow na dostęp do Twojej poczty e-mail?”)
  • StackOverflow autoryzował żądanie, upewniając się, że użytkownik ma> 50 punktów reputacji.

Co to jest OpenID (bez połączenia)?

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.

„Nadużywanie” protokołu OAuth

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.

+1 za wyjaśnienie części „Co to jest OpenID (bez połączenia)?”
Guillaume
2017-08-07 21:09:49 UTC
view on stackexchange narkive permalink

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 :)

Tak, myślałem tak samo.Jeśli spróbujemy udzielić użytkownikowi dostępu do zasobów, to należy to załatwić inaczej, ponieważ nie jest to delegacja, jak robi to oauth2
johnaweber
2017-08-08 17:42:43 UTC
view on stackexchange narkive permalink

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 ułatwia użytkownikom dostęp do uprawnionego kontenera z powiązanymi zasobami (np. dostęp do witryny internetowej).
  • Oauth ułatwia automatyczny dostęp do uprawnionego zasobu w kontenerze (np. CRUD opsuje plik lub rekord za pośrednictwem internetowego interfejsu API).

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.

Mike Schwartz
2018-07-09 01:44:47 UTC
view on stackexchange narkive permalink

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

  • Autoryzacja : witryna kanału frontowego, która wyświetla stronę logowania i stronę autoryzacji (zgody). (RFC 6749)
  • Token : punkt końcowy kanału wstecznego, zwykle wymagający uwierzytelnienia, w którym klient może żądać tokenów dostępu, id_tokens i refresh tokens. (RFC 6749)
  • Konfiguracja : metadane dostawcy opublikowane w .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)
  • Rejestracja klienta : punkt końcowy aplikacji do tworzenia lub aktualizowania klienta OAuth (RFC 7591)

Punkty końcowe bez OAuth

  • Informacje o użytkowniku : dostęp do interfejsu API chronionego tokenem, w którym klient może zażądać oświadczeń dotyczących tematu. To jest serwer zasobów w terminach OAuth.
  • JWKS : aktualne klucze publiczne OP używane do podpisywania i szyfrowania
  • Zarządzanie sesjami : Używany przez wszystkie trzy specyfikacje wylogowania OpenID (żadna nie działa tak dobrze)
  • Webfinger : Używany do uruchamiania wykrywania OP działającego wstecz z adresu e-mail (lub innego identyfikatora), czyli jak ustalić punkt końcowy konfiguracji domeny. (RFC 7033, ale nie jest częścią grupy roboczej OAuth)
Masz na myśli, że przez cały ten czas, przy wszystkich twoich odpowiedziach, Gluu i OXD są * Twoimi * produktami?Pamiętaj, że musisz ujawnić swój związek z podanymi linkami, a zwłaszcza z produktami, do których się odnosisz.Obawiam się, że każde zamieszczone przez Ciebie odniesienie do Gluu to „promocja” i może zostać uznane za reklamę.


To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...