8

Mój interfejs REST API (api.example.com) jest obecnie dostawcą OAuth2 i jest obsługiwany przez aplikację mobilną.Jak uwierzytelniać klienta u wielu dostawców OAuth2?

Niedawno stworzyliśmy nową stronę internetową (www.example.com), która będzie traktowana jak każdy inny klient. Sieć może uwierzytelnić się w interfejsie API, korzystając z hasła grant_type, w którym użytkownik wpisuje swoje poświadczenia. Stamtąd klient (przeglądarka) otrzymuje token dostępu i może korzystać z interfejsu API.

Problem polega na tym, że chcemy uwierzytelniać klientów na stronie internetowej za pomocą Facebooka.

Zasadniczo sieć powinna w końcu uzyskać token dostępu użytkownika, aby uzyskać dostęp do interfejsu API, logując się przez Facebooka.

Szukałem wokół i widziałem dwóch nogach i trzech nogach scenariusze uwierzytelniania OAuth2 ale:

  • Jak to się stosuje w scenariuszu po prostu opisane?
  • Co to jest właściwy sposób?
  • Jakie kwestie bezpieczeństwa powinienem wziąć pod uwagę?
+0

Poradnik przewodnika Fb to https://developers.facebook.com/docs/facebook-login/multiple-providers –

+0

Przeczytałem to wcześniej, ale tęsknię za tym, o co prosiłem. Ten dokument opiera się na weryfikacji wiadomości e-mail i nie jest dokładny w kwestii uwierzytelniania klienta u wielu dostawców OAuth2. Użyłem Facebooka jako przykładu, ale może być cokolwiek :) – andrefsp

Odpowiedz

3

Oto jeden ze sposobów, aby przejść na ten temat:

Gdy klient uwierzytelnia z Facebook, na telefon za pomocą ich SDK lub wystąpienie w Internecie za pomocą metody autoryzacji, dostanie token dostępu facebook.

Jeśli twój interfejs API jest również dostawcą OAuth2, a następnie chcesz zalogować się do klienta (wydać token dostępu) za pomocą tokena na Facebooku, możesz to zrobić za pomocą dotacji rozszerzeń (https://tools.ietf.org/html/rfc6749#section-4.5).

W ten sam sposób OAuth2 ma typ password_grant, można utworzyć akceptację rozszerzenia, na przykład facebook_access_token_grant, i wysłać token facebook do API. Jeśli token jest ważny, interfejs API wystawia token dostępu do aplikacji, który może być używany przez klienta przy kolejnych żądaniach.

Kroki są:

  • 1 - Klient dostaje token dostępu z facebook. Na urządzeniach mobilnych będzie korzystał z Facebooka SDK, aplikacje internetowe mogą być ze słowem logowania javascript lub metodą autoryzacji, gdy przeglądarka jest przekierowywana na facebook i tak dalej.

  • 2 - Po uzyskaniu dostępu do tokenu facebook, klient żąda tokenu dostępu z interfejsu API poprzez zamieszczenie:

POST/żeton HTTP/1.1 Host:
server.example.com
Content-Type: application/x-www-form-urlencoded

client_id={{ client_id }}&client_secret={{ client_secret }}&grant_type=facebook_access_token&facebook_access_token={{ TOKEN }} 

HTTP/1.1 200 OK
Content-Type: application/json; charset = UTF-8
cache- sterowanie: no-store
Pragma: no-cache

{ 
    "access_token":"API_ACCESS_TOKEN", 
    "username":"theuser", 
    "expires_in":3600, 
    "refresh_token":"API_REFRESH_TOKEN", 
} 
  • 4 - Klient używa tego tokena podczas kolejnych wywołań interfejsu API.

GET/some_endpoint HTTP/1.1 Host
: server.example.com
odpowiedzialny: okaziciela API_ACCESS_TOKEN

Upewnij się, że to wszystko zrobić za pośrednictwem bezpiecznego połączenia (TLS), tak aby nie naruszasz https://tools.ietf.org/html/rfc6749#section-1.6 i wszystko to powinno być zgodne z protokołem OAuth2.

+0

w jaki sposób token dostępu pomaga w łączeniu dwóch różnych oauth. –

-3

Trzeba mieć logowanie użytkownika zarówno a następnie połączyć je za pomocą poczty elektronicznej

+2

To jest bardzo ogólnikowa odpowiedź. – andrefsp