2017-02-17 3 views
0

Ich habe den besseren Teil eines Tages damit verbracht, dies zu erforschen, und dachte, ich könnte das selbst herausfinden, aber kein Glück.Verwenden Sie Facebook Login, um neue Benutzer zu einer privaten Datenbank mit einer REST-API hinzuzufügen

Hier ist die Situation, ich habe FB-Authentifizierung in einer mobilen App. Das funktioniert gut. Ein Benutzer kann sich anmelden und ich kann auf die öffentlichen Profildaten usw. zugreifen.

Das Problem ist, dass ich neue Benutzer oder erstmalige Logins haben möchte, um neue Datensätze in meiner privaten Datenbank zu erstellen, weil ich auf der Suche bin mehr als E-Mail und FB-ID. Zum Beispiel, Lieblingsartikel. Das kann ich auch einfach mit einem Post an (www.mywebsite.com/api/users/) erreichen.

Also ist das ECHTE Problem, dass ich nicht eine Route haben möchte, die einfach Leute erlaubt, Benutzer zu meiner Datenbank hinzuzufügen, willy-nilly.

Gibt es eine Möglichkeit, das Zugriffstoken an eine API-Route zu übergeben, um sicherzustellen, dass ein Benutzer der Datenbank nur dann einen neuen Benutzerdatensatz hinzufügen kann, wenn er eine gültige FB-Anmeldung hat?

Ich habe die berühmte "auth/facebook" -Route eingerichtet, die im Web sehr beliebt ist und auch gut funktioniert, bis ich sie über meine App erreiche. Es wirft dann X-Ursprungsfehler (glaube ich teilweise aufgrund der Callback-Route).

Dieser Beitrag war ähnlich, aber immer noch nicht ganz abdecken. Authenticating against a REST API with iOS client using Facebook SSO as the only login mechanism

Bitte helfen!

Danke, Wayne

Antwort

0

Nach weiteren zwei Tagen graben, fand ich eine ziemlich einfache Lösung.

Die Facebook-Grafik-API ermöglicht es Ihnen, das Zugriffstoken zu senden, um grundlegende Benutzerdaten zu erhalten.

Also meine Lösung ist jetzt das:

1. Use cordova-facebook4 plugin to authenticate within the app. (You can find details here: https://github.com/jeduan/cordova-plugin-facebook4 
2. Send the FB id AND authentication token to my server route, like this: `myapiserver.com:1234/auth/facebook/<token>/<id>` 
3. On the server side, send an ajax request to https://graph.facebook.com/me?access_token=<token received from the 
cordova plugin>. This will return the name and FB ID as JSON. 
4. On the server, compare the ID returned from facebook to the ID sent with the request. If they match, add the new user, if not, do 
not add the user and return an error. Of course, the server will 
not allow a new account to be added to the system if that FB id is 
already in use. 

An dieser Stelle scheint es, dass der schlimmste Schaden, der getan werden könnte für jemand anderen Person FB-Account zu hacken, erhalten ihre Token und ID und verwenden das, um einen Benutzer auf meinem System für diese Person zu erstellen. Was sinnlos genug scheint, dass ich mich nicht um diese Angriffe kümmern muss.

Bitte kommentieren Sie, wenn Sie eine bessere Lösung kennen oder eine Sicherheitslücke übersehen haben.

Ref: How to get the Facebook user id using the access token

Verwandte Themen