2017-02-14 3 views
1

Ich habe einige REST-Dienste auf meiner Website, auf die Dritte zugreifen können. Mein Plan ist einfach. Um diese Dienste in Anspruch zu nehmen, müssen sie einen Schlüssel von mir anfordern. Ich werde sie privat mit einer GUID versorgen. Jeder Anruf bei einem meiner Dienste überprüft über einen Filter die Kopfzeile des Schlüssels und akzeptiert/lehnt die Anfrage entsprechend ab. Diese Seite ist alles HTTPS, also würde der Schlüssel während des Transports verschlüsselt werden. Ich mache mir keine Sorgen, dass der Schlüssel für autorisierte Kunden visuell erkennbar ist. Mit anderen Worten, ich mache mir keine Sorgen über irgendwelche "Inside" -Angriffe oder Leute, die den Schlüssel teilen. Ich will einfach keine zufälligen, nicht autorisierten externen Benutzer.Senden Sie einfach einen Schlüssel im HTTP-Header, um sich für einen REST-Aufruf zu authentifizieren.

Ich habe mich umgesehen und ich sehe wirklich niemanden, der es genau so macht. Ich fühle mich, als würde ich mich zu sehr vereinfachen ... aber auf der anderen Seite sehe ich auch nicht, was damit nicht stimmt.

Meine Frage ist ... klingt das sicher genug (aus einer grundlegenden/minimalen Perspektive) oder zeigt es einige klaffende Sicherheitslücke, die ich nicht sehe?

FWIW - ich bin mit dem Spring Framework verwenden, einschließlich Spring Security 4.

Dank!

+0

Klingt wie eine grundlegende API-Schlüsselimplementierung usw. Ich würde [dieses zuerst] überprüfen (https://stackoverflow.com/questions/25317405/securing-rest-api-using-custom-tokens-stateless-no-- UI-Nein-Cookies-No-Basic-Au). – dkanejs

+0

Ja. Entschuldigung, ich war in meiner ursprünglichen Nachricht nicht klar. Ich bin schon dabei. Es ist live und funktioniert gut. Meine Frage war mehr ... klingt es sicher genug (aus einer grundlegenden/minimalen Perspektive) oder zeigt es ein klaffendes Sicherheitsloch, das ich nicht sehe? Ich werde den ursprünglichen Beitrag aktualisieren. –

+0

Cool, es ist ein ziemlich häufiges Muster wirklich, manchmal ist der minimale Ansatz der beste. Ich habe eine Antwort mit einem zusätzlichen Ansatz eingereicht, der verwendet werden könnte. – dkanejs

Antwort

2

Wenn es HTTPS ist und der API-Schlüssel in der Kopfzeile während des Transports verschlüsselt ist, wie Sie es beschrieben haben, dann folgt es einem ziemlich standardmäßigen Design-Authentifizierungsmuster.

Ihre Sicherheit hängt jetzt davon ab, wie Sie Ihre API-Schlüssel verteilen und speichern.

Obwohl, könnten Sie eine "Application Identifier and Key pairs" Ansatz verwenden.

Während des API-Key-Musters kombiniert die Identität der Anwendung und der geheimen Nutzung Token in einem Token, dieses Muster trennt die zwei. Jede Anwendung, die die API verwendet, gibt eine unveränderliche initiale Kennung aus, die als Anwendungs-ID (App ID) bekannt ist. Die App ID ist Konstante und kann oder darf nicht geheim sein. Zusätzlich kann jede Anwendung 1-n-Anwendungsschlüssel (App_Keys) haben. Jeder Schlüssel ist direkt mit der App_ID verbunden und sollte als geheim behandelt werden.

Nur für den Fall, dass Sie die Anwendung in der Zukunft erweitern möchten.

Verwandte Themen