Wie authentifiziere ich den Client bei mehreren OAuth2-Providern?

8

Meine REST-API (api.example.com) ist derzeit ein OAuth2-Anbieter und wurde von einer mobilen App unterstützt.

Vor kurzem haben wir eine neue Website (www.example.com) erstellt, die wie jeder andere Client behandelt wird. Das Web kann sich auf der API authentifizieren, indem es ein Kennwort grant_type verwendet, in dem ein Benutzer seine Anmeldeinformationen eingibt. Von dort erhält der Client (Browser) ein Zugriffstoken und kann dann die API konsumieren.

Das Problem besteht darin, dass wir Kunden auf der Webseite mit Facebook authentifizieren wollen.

Im Grunde sollte das Web im Endeffekt in der Lage sein, ein Benutzerzugriffstoken zu erhalten, um auf die API zuzugreifen, indem es sich über Facebook anmeldet.

Ich habe mich umgesehen und zwei legale und dreibeinige OAuth2-Authentifizierungsszenarien gesehen, aber:

  • Wie trifft das auf das gerade beschriebene Szenario zu?
  • Was ist der richtige Weg, dies zu tun?
  • Was sind die Sicherheitsprobleme, die ich berücksichtigen sollte?
andrefsp 22.04.2014, 16:00
quelle

2 Antworten

3

Hier ist ein Weg, dies zu tun:

Wenn sich ein Kunde mit Facebook, auf Mobilgeräten mit seinem SDK oder zum Beispiel mit der Autorisierungsmethode im Web authentifiziert, erhält er einen Facebook-Zugriffstoken.

Wenn Ihre API auch ein OAuth2-Provider ist und Sie sich dann mit dem Facebook-Token, das Sie gerade erhalten haben, beim Client anmelden (ein Zugriffstoken ausgeben), können Sie dies tun, indem Sie Extension-Grants verwenden ( Ссылка ).

Genau wie OAuth2 über den Typ password_grant verfügt, könnten Sie auch eine erweiterte Berechtigung, z. B. facebook_access_token_grant, erstellen und dieses Facebook-Token an die API senden. Wenn das Token gültig ist, gibt die API ein App-Zugriffstoken aus, das vom Client für nachfolgende Anforderungen verwendet werden kann.

Die Schritte sind:

  • 1 - Der Kunde erhält ein Zugangstoken von Facebook. Auf mobilen Geräten wird das Facebook SDK verwendet, auf Web-Apps kann mit der Javascript-Login-Sache oder mit der authorize-Methode, wo der Browser nach Facebook umgeleitet wird usw. geschehen.

  • 2 - Nach Erhalt des Facebook-Zugriffstokens fordert der Client ein Zugriffstoken von der API an, indem er Folgendes einreicht:

  

POST / Token HTTP / 1.1
     Host: server.example.com
     Inhaltstyp: application / x-www-form-urlencoded

%Vor%
  • 3 - API debuggt das facebook_access_token mit einem Ссылка . Wenn alles validiert wird, gibt die API ein Bearer-Token an den Client aus, indem sie etwas wie folgt antwortet:
  

HTTP / 1.1 200 OK
   Content-Type: application / json; charset = UTF-8
   Cache-Control: keine Filiale    Pragma: no-cache

%Vor%
  • 4 - Client verwendet dieses Token bei nachfolgenden Aufrufen der API.
  

GET / some_endpoint HTTP / 1.1
   Host: server.example.com
   Autorisierung: Bearer API_ACCESS_TOKEN

Stellen Sie sicher, dass Sie dies über eine sichere Verbindung (TLS) tun, damit Sie nicht gegen Ссылка und das alles sollte dem OAuth2-Protokoll entsprechen.

    
andrefsp 19.04.2015, 12:35
quelle
-3

Sie müssen beide Benutzer anmelden und dann per E-Mail verbinden

    
Muhammad Umer 18.04.2015 16:31
quelle