Frage

Ich arbeite an einem REST-Service, der ein paar Anforderungen hat:

  1. Es hat sicher sein.
  2. Die Benutzer sollten nicht in der Lage sein, Anfragen zu schmieden.

Meine aktuelle vorgeschlagene Lösung ist eine benutzerdefinierte Autorisierungsheader zu haben, die wie folgt aussehen (dies ist die gleiche Art und Weise, dass die Amazon Web Services Arbeit):

Authorization: MYAPI username:signature

Meine Frage ist, wie die Signatur zu bilden. Wenn der Benutzer in den Dienst anmeldet werden sie einen geheimen Schlüssel gegeben, die sie sollten Anfragen unterzeichnen nutzen können. Dies stoppt andere Benutzer-Anfragen in ihrem Namen einreicht, wird aber nicht verhindern, dass sie Anfragen schmieden.

Die Anwendung, die diesen Dienst verwenden werden ist eine iPhone-Anwendung, so dass ich dachte, wir einen öffentlichen Schlüssel in der Anwendung eingebettet haben könnten, die wir mit einer zusätzlichen Unterschrift tun können, aber bedeuten das, dass wir zwei haben müssen Unterschriften, ein für den Benutzerschlüssel und ein für die App-Taste?

Jede mögliche Beratung sehr geschätzt, würde ich ganz gerne dieses das erste Mal richtig erhalten.

War es hilfreich?

Lösung

Ich denke, der einfachste Weg, um dieses Recht zu tun, wäre die Verwendung von HTTPS-Client-Authentifizierung. Apples Seite hat eine fädeln über dieses Thema.

Edit:. Genehmigung zu handhaben, würde ich eine separate Ressource erstellen (URI) auf dem Server für jeden Benutzer, und nur zulassen, dass (authentifizierte) Benutzer diese Ressource zu manipulieren

Edit (2014): Apple-Forum ihre Software in den letzten sechs Jahren stark verändert; der Thread ist jetzt unter https://discussions.apple.com/thread/1643618

Andere Tipps

Die Antwort ist einfach: Es kann nicht getan werden. Sobald Sie eine Lösung an den Endverbraucher versandt, kann er oder sie angreifen Allways den Server mit kommuniziert. Die gängigste Version dieses Problem betrügt mit hallo-Score-Listen in Flash-Spielen. Sie können es machen härter durch eine Art von Verschlüsselung in der Client-Einbettung und den Code verschleiern ... Aber alle Code kompiliert und verschleierten können Allways dekompilierten und unverschleierte werden. Es ist nur eine Frage, wie viel Zeit und Geld Sie bereit sind, zu verbringen und ebenfalls für den potentiellen Angreifer.

So Ihr Anliegen ist nicht , wie Sie versuchen, den Benutzer sendet fehlerhafte Daten zu Ihrem System zu verhindern. Es ist, wie der Benutzer zu beschädigen Ihr System zu verhindern. Sie haben Ihre Schnittstellen so zu gestalten, dass alle durch fehlerhafte Daten verursachten Schaden nur den Benutzer wirkt es gesendet wird.

Es gibt eine bessere Diskussion dieser hier:

Best Practices zur Sicherung einer REST API / Web-Service

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top