OAuth to coś, o czym każdy programista musi wiedzieć. Jeśli tworzysz samodzielną aplikację lub aplikację zewnętrzną, która integruje się z inną usługą HTTP, musisz wiedzieć, jak działa OAuth, aby zapewnić użytkownikom łatwe w użyciu i dobrze zintegrowane usługi.
Chodzi o to, aby umożliwić aplikacjach klientów ograniczony dostęp do informacji o użytkowniku bez udostępniania poświadczeń użytkownika lub hasła. OAuth Framework jest odpowiedzialny za wymiany wymagane, zanim aplikacja otrzyma informacje.
Załóżmy, że chcesz zapisać się na dev.do (co jest świetnym miejscem dla programistów do wymiany pomysłów), pozwalają zarejestrować się za pomocą konta Github. Jak to się dzieje? Skąd wiedzą, że posiadasz konto Github, z którym się zapisujesz?
Co ważniejsze, w jaki sposób upewnić się, że dev.do nie przekracza swoich granic, jeśli chodzi o informacje przechowywane w github?
Uczestnicy OAuth
Trzymamy się przykładu wtyczki GitHub Edytora Atom, która umożliwia programistom popychanie kodu do GitHub bezpośrednio za pomocą interfejsu atomu. Powodem tego jako przykładu jest to, że Github nie ukrywa szczegółów za sceną i możesz zobaczyć, co dzieje się pod maską.
Zanim przejdziemy do minutiae pracy Oauth. Przyjmijmy scenę, rozpoznając wszystkich uczestników w giełdzie:
Rejestracja OAuth
Proces rozpoczyna się, gdy opracowywana jest aplikacja kliencka. Możesz przejść do dostawcy zasobów i zarejestrować się w portalu ich dewelopera lub sekcji API na stronie internetowej. Będziesz także musiał podać adres URL zwrotnego, w którym użytkownik zostanie przekierowany po zaakceptowaniu lub odrzuceniu, aby udzielić aplikacji niezbędne uprawnienia.
Na przykład, jeśli przejdziesz do GitHub → Ustawienia → Ustawienia programisty i kliknij „Zarejestruj nową aplikację”. To zapewniłoby ci Identyfikator klienta które można upublicznić i Sekret klienta Które organizacja programistów musi zachować… dobrze w tajemnicy.
Po dostarczeniu identyfikatora klienta i tajemnicy, dewelopera, ty musieć Bądź bezpieczny i bezpieczny, ponieważ nie będzie ich ponownie pokazany przez serwer autoryzacji. To samo dotyczy wszelkich innych tokenów, które zostałyby rzucone (więcej na tokenach później).
OAuth 2 Workflow
Zarejestrowałeś swoją aplikację. Został opracowany i przetestowany, a teraz użytkownicy są gotowi do użycia. Nowy użytkownik podczas rejestracji w usłudze zostanie pokazany opcja „Zaloguj się z GitHub”. To pierwszy krok.
Żądanie autoryzacji jest częścią, w której nowe okno (lub podobny monit) otwiera się z stroną zasobów i prosi użytkowników o zalogowanie się. Jeśli jesteś już zalogowany, na tym urządzeniu, ten krok jest pomijany i po prostu zapytano cię GitHub. Jest to o wiele bardziej przejrzyste w przypadku atomu, ponieważ proszą cię o ręczne przejście na stronę GitHub i udzielić im zgody.
Po wizycie URL poproszono Cię o pozwolenie.
Zwróć uwagę na adres URL, który pokazuje, że jest to strona internetowa bezpieczna (HTTPS) przez Github.Inc. Teraz użytkownik możesz być pewien, że bezpośrednio wchodzisz w interakcje z GitHub. Atom po prostu czeka, całkiem nieźle.
W przeciwieństwie do ATOM, większość aplikacji klientów automatycznie ładuje stronę logowania lub uprawnień. Chociaż jest to bardzo wygodne, można go również niewłaściwie wykorzystać, jeśli aplikacja kliencka zdecyduje się otworzyć link phishingowy. Aby tego uniknąć, musisz zawsze sprawdzić adres URL, do którego jesteś przekierowywany, i upewnić się, że jest to prawidłowy adres URL i używa protokołu HTTPS.
Aby powiadomić klienta ATOM, otrzymasz token (dotację autoryzacji), który jest następnie przesyłany do klienta Atom.
Gdy użytkownik to zrobi, zadanie użytkownika jest zakończone. (W rzeczywistości typowy użytkownik nawet nie jest świadomy gantu upoważnienia. Przykład Githuba został wybrany, aby pokazać, że tak się dzieje).
Dotacja autoryzacji nadal nie jest jednostką, która daje klientowi dostęp do informacji o użytkowniku. To uzyskuje się za pomocą czegoś zwanego tokenem dostępu. Która aplikacja kliencka spróbuje dostać w tym kroku.
Aby to zrobić, klient będzie musiał teraz udzielić dotacji autoryzacji serwerze autoryzacji wraz z dowodem własnej tożsamości. Tożsamość jest weryfikowana przy użyciu identyfikatora klienta i sekretu klienta, które zostały wcześniej przekazane aplikacji klienta.
Weryfikacja tożsamości odbywa się, aby upewnić się, że użytkownik nie jest oszukany w użyciu nikczemnej aplikacji, która udawała, że jest to legalna aplikacja. Na przykład, jeśli ktoś zdecyduje się wymienić swój wykonywalny jako atom o tej samej nazwie, użytkownik logo i funkcjonalności może zostać oszukany, aby uzyskać dostęp do klienta, który może niewłaściwie wykorzystać Twoje informacje. Mogą węszyć, a nawet działać bez twojej zgody. Serwer autoryzacji zapewnia, że klient jest rzeczywiście tym, co wydaje się swoim użytkownikom.
Po zweryfikowaniu tożsamości i przyjęciu dotacji autoryzacji serwer autoryzacji rzuca token do aplikacji klienckiej. Pomyśl o tokenie jako kombinacji zarówno nazwy użytkownika, jak i hasła, które można przekazać serwerze zasobów, aby uzyskać dostęp do określonego zasobu chronionego.
Wreszcie, korzystając z tego tokena, aplikacja może teraz uzyskać dostęp do wymaganych informacji użytkownika i innych zasobów z serwera zasobów.
Zauważ, jak za całą wymianę faktyczną nazwę użytkownika i hasło, gdzie nigdy nie udostępniono klientowi? To jest piękno Oauth. Zamiast podawać nazwę użytkownika i hasła, które zapewniłyby aplikacji cały dostęp do zasobu, zamiast tego używa tokenów. A token może uzyskać tylko ograniczony dostęp do zasobu.
Załóżmy, że stracisz dostęp do urządzenia, w którym autoryzowana aplikacja klienta. Możesz zalogować się do GitHub i przejść do ustawień → Aplikacje → Upoważnione aplikacje OAuth do odwołania dotacji autoryzacji i tokenu dostępu. Będę robić to samo, ponieważ na powyższych zrzutach ekranu dotacja autoryzacji została pokazana publicznie.
Teraz, gdy masz widok na ptasie oko.Możesz przeczytać więcej o dotacjach autoryzacji i innych drobniejszych szczegółach protokołu oraz o tym, jak zawierają połączenia API tutaj.