2016-04-05 1 views
5

Ich habe den folgenden Code in meinem Winkel App Erklärung - ein API-Schlüssel für Facebook (Share-Taste implementieren):Angular - kann nicht sehen, wie diese API zu verbergen Key

.run(function($FB){ 
    $FB.init('9xxxxxxxxxxxx94'); 
}) 

Ich weiß also, die allgemeine Antwort auf diese - "API-Schlüssel sollten auf der Serverseite gehalten werden", aber ich sehe nicht, wie ich dies tatsächlich implementieren.

Die Share-Call-Methode wird am Frontend gemacht, also selbst wenn mein Server den API-Schlüssel behalten und gesendet hat, ist er sicher noch am Frontend sichtbar, sonst wie würde der Share-Button funktionieren?

Also meine Frage, wie verbirg ich das Facebook API Key?

Danke.

+0

Ich habe dies für die Zeit erforscht. Ich sehe keine definitive Methode zum "Verstecken" des Schlüssels, jedoch muss man sich überlegen, warum Facebook das nicht nur zulässt, sondern Ihnen zeigt, wie man das in Ihrem Client-Javascript verwendet ... Ich gehe derzeit davon aus, dass Sie das tun Als Entwickler bei FB anmelden und eine App erstellen, musstest du einige identifizierende Informationen eingeben? Ich denke, was passiert ist, ist, dass FB eine Reihe von Ansprüchen mit einem geheimen Schlüssel unterzeichnet, nur zu FB wissen, und wenn Sie es über das Internet zurückgeben, die Informationen extrahiert und verwendet, um zu überprüfen, den Schlüssel nicht manipuliert wird, zu überprüfen Identität. – samazi

Antwort

5

den Schlüssel

Das erste, was die Beantragung, was geschieht, ist, dass der Kunde einen Schlüssel anfordert. Dies geschieht nur auf bestimmten Seiten wie den Anmelde- und Anmeldeseiten. Die Idee hier ist, dass wir sicherstellen wollen, dass nur Benutzer, die mit einem bekannten Client surfen (in diesem Fall die offizielle Website oder der Core-Client, wie sie genannt wird), Aktionen wie das Erstellen oder Authentifizieren eines Benutzers ausführen dürfen.

Wenn die Clientanwendung die Anmeldeseite anfordert, generiert der Server daher ein eindeutiges Token, das auf den in der Anforderung gesendeten Informationen basiert. Die verwendeten Informationen sind immer etwas, was der Server weiß, etwas, das der Klient kennt, und etwas, das beide wissen. So kann der Server beispielsweise einen eindeutigen Schlüssel basierend auf User agent + current time + secret key generieren. Der Server generiert basierend auf diesen Informationen einen Hash und speichert dann einen Cookie, der nur den Hash auf dem Clientcomputer enthält.

Festlegen von Berechtigungen

An dieser Stelle wirklich unser Schlüssel nicht mehr ein Schlüssel ist. Es wurde in ein Zugriffstoken umgewandelt. Der Server sollte dann dieses Zugriffstoken nehmen und es für den späteren Abruf speichern. Sie können den Schlüssel in eine Datenbank einfügen, aber da Daten dieses Typs oft abgerufen werden müssen, würde ich vorschlagen, einen Schlüssel-Wert-Speicher wie Redis zu verwenden, um Datenbank-Lese-/Schreibvorgänge zu reduzieren und die Leistung zu erhöhen.

Wenn Sie das Token speichern, sollten Sie auch ein separates Stück Daten speichern, um anzuzeigen, welche Berechtigungen mit dem Token verknüpft sind. In diesem Fall dient unser Token nur dazu, Benutzer zu registrieren und zu authentifizieren, sodass wir sie neben einem Wert speichern, der angibt, wem der Token gehört (Web-Benutzeroberfläche der App) und welche Berechtigungen er hat (beschränkt auf die Erstellung und Authentifizierung von Benutzern). . Wir behandeln es wie jeden anderen API-Client, auf diese Weise können wir Statistiken erfassen und steuern, wie sie verwendet werden.

Autorisieren eine Anfrage

Wenn der Kunde dann die Anforderung POST macht einen neuen Benutzer oder melden Sie sich an dem Server erstellen wird prüfen, ob der Kunde zusammen mit der Anforderung eine Identifizierung Cookie gesendet. Wenn nicht, lehnen wir die Anfrage ab. Wenn der Cookie gesendet wird, sollte der Server den Hash erneut unter Verwendung der zuvor verwendeten Werte erzeugen (diese Werte sind entweder bereits bekannt oder werden mit der Anfrage trotzdem gesendet, so dass wir den Server nicht wirklich besteuern) vergleichen ihn mit dem Cookie an uns gesendet, und wenn die Werte übereinstimmen, kann die Anfrage fortgesetzt werden.

Sources - Securing API Keys

ODER

Sie einfach eine Anfrage an Ihren Server senden und lassen Sie ihn Ihre Anfrage mit dem versteckten API-Schlüssel verarbeiten und zurück nur das Ergebnis Ihrer Anfrage an das Front-End.