2016-02-27 18 views
11

ich meine eigene API bin Gebäude, die durch verwendet wird:meine API mit einer API-Secure Key

1) Android App 2) Desktop-Anwendung

Einer meiner Urls, ist dies: http://api.chatapp.info/order_api/files/getbeers.php, aus dem meine Benutzer erhalten Daten aus meiner Datenbank über JSON. Ich habe in letzter Zeit darüber nachgedacht, Authentifizierung mit einem API-Schlüssel zu erstellen.

Irgendwelche Ideen, wie es geht? Oder muss ich etwas wie machen und dann die GET-Methode mit einem Schlüssel vergleichen, der in meiner Datenbank gespeichert ist?

Irgendwelche Ideen?

+0

Ist der Hauptgrund, dass Sie mit einem API-Schlüssel authentifizieren möchten, um Ihre Daten zu sichern, oder ist es nur die Verwendung zu überwachen? Es gibt einfache Methoden zum Generieren und Verwenden eines API-Schlüssels zur Überwachung der Verwendung und detailliertere Authentifizierungsmethoden, z. B. die Verwendung von OAuth, um Ihre Daten sicherer zu machen. – Mike

+0

Ich möchte meine Daten sicherer halten .... Wie werde ich den oAuth machen? –

+0

Wenn dies der Sicherheit dient, ist das Schlimmste, was Sie tun können, Ihre eigene Lösung zu rollen. Es ist immer besser, ein bewährtes Paket wie OAuth zu verwenden. Sie haben bereits Dinge festgelegt, von denen Sie noch nicht wussten, dass sie ein Problem darstellen. – jairbow

Antwort

2

wie @ Mike erwähnt, die OAuths sind komplexe API, und noch wichtiger, erfordern einen dritten Service-Endpunkt ausgeführt wird, um die Authentifizierung/Autorisierung für den Zugriff bereitzustellen.

One denken Sie auf jeden Fall nicht möchten Sie tun, ist der API-Schlüssel in der URL enthalten. Dies wird sehr einfach wiedergegeben und/oder gefälscht und durch Proxies identifiziert und in Logfiles festgehalten. Eine bessere Lösung besteht darin, den API-Schlüssel als zusätzlichen HTTP-Header in Ihre Anfrage aufzunehmen und nach diesem spezifischen Wert in Ihrem API-Endpunkt zu suchen.

Für einen einfachen Anwendungsfall, wie Sie es vorschlagen, könnte es sich lohnen, den API-Aufruf mit einem Schlüssel zu authentifizieren, den Sie als gemeinsames Geheimnis zwischen Ihrer Android-App und dem API-Endpunkt behalten. Wenn Sie diese Route nehmen, ist es nicht leicht zu ändern, und wenn kompromittiert wird, bedeutet das eine echte PITA, um einen neuen Schlüssel zu aktivieren und an Ort und Stelle zu bringen.

Wenn Sie ein "shared secret" verwenden, dann empfehle ich, es relativ einfach zu machen (oder zumindest einige UI zu haben), damit der Benutzer diesen Schlüssel aktualisieren kann, falls er kompromittiert ist. Ich nehme an, dass Sie Ihren Web-Service relativ einfach aktualisieren können. Dieser Prozess ist nicht so sicher wie OAuth oder OAuth2, ist jedoch einfacher und schneller zu implementieren und bietet dennoch ein angemessenes Maß an Sicherheit (wobei Sicherheit in diesem Fall bedeutet, dass Sie auf diese API zugreifen dürfen).

+0

abgelegt haben, wenn ich für Authorization gehen: Basic Hash? –

+0

Sie könnten einen Einweg-Hash (wie SHA-256) oder nur einen rein zufälligen Wert als gemeinsames Geheimnis verwenden, wenn Sie diesem Pfad folgen. Ich würde nicht empfehlen, den Wert etwas "entschlüsselbar" (dh mit irgendeiner Art von symmetrischen Chiffre), und pro andere Antworten auf diesem Q, tun Sie definitiv, was Sie brauchen, um den Wert von Protokollen - Daten in einem POST oder Header in der Anfrage, wie ich oben vorgeschlagen habe. – heckj

+0

Was ist, wenn ich den password_hash() von PHP mit BCRYPT-Algorithmus verwende? –

2

OAuth ist ein kompliziertes Protokoll und würde besser durch Googlen und Lesen der Dokumentation erlernt werden, aber dies ist wahrscheinlich eine gute Option, um Ihre API-Endpunkte zu sichern.

Kurz gesagt, OAuth ist eine Möglichkeit für einen Benutzer, Zugriff auf Ihre API zu erhalten, indem er den Zugriff auf sie und dann ein sicheres "Zugriffstoken", das Sie bereitstellen, prüft.

  • Der Client fordert ein Zugriffstoken vom API-Server an, indem er einen "api-Schlüssel" und eine Art "geheimen Schlüssel" übergibt. Diese werden Ihrem API-Benutzer zur Verfügung gestellt, wenn sie sich für die Verwendung Ihrer API registrieren.

  • Wenn die vom Client an den API-Server übermittelten Anmeldeinformationen korrekt sind, antwortet der API-Server mit einem "Zugriffstoken". Dieses Zugriffstoken ist für eine bestimmte Zeit sinnvoll und sollte mit allen nachfolgenden Anforderungen gesendet werden, um zu beweisen, dass dem Client Zugriff auf die API gewährt wurde.

  • Der Client stellt eine API-Anforderung für Daten von Ihrem API-Server und muss das "Zugriffstoken" enthalten. Wenn das "Zugriffstoken" enthalten ist und immer noch gültig ist (d. H. Nicht abgelaufen ist), können Sie mit den angeforderten Daten antworten.

  • Hier finden Sie einige Links zu Ressourcen, die Ihnen helfen, OAuth in Ihrer API zu implementieren.

    OAuth Docs

    http://scottksmith.com/blog/2014/07/02/beer-locker-building-a-restful-api-with-node-oauth2-server/ http://www.devx.com/webdev/create-your-own-rest-api-using-oauth-authentication.html

    Siehe this link für einen Vergleich von OAuth 1.0 und OAuth 2.0 zu bestimmen, welche besser ist, in Ihrem Fall zu verwenden.

    2

    Wenn Sie Benutzer authentifizieren müssen, dann würde ich mit Oauth gehen. Wenn nicht, dann fügen Sie eine verschlüsselte Prüfsumme von Anfrageparametern zum Kopf einer benutzerdefinierten Anfrage hinzu.

    Verwandte Themen