Verwenden von OAuth für die Server-zu-Server-Authentifizierung?
Derzeit arbeite ich angeben meine Firma neue partner/öffentliche API, die eine Ressourcen-orientierte RESTful-web-service. Das fehlende Stück des Puzzles, im moment ist die Authentifizierung/Autorisierung.
Die Anforderungen sind:
- Zunächst muss die Arbeit für die server-zu-server-Umgebung, z.B. einer server-Anwendung muss in der Lage sein, sich selbst zu identifizieren, damit wir wissen, wer dem Aufruf der API.
- In Zukunft möchten wir, um es zu ermöglichen, die Identität von Benutzer-Konten, so dass als auch auf dem server identifiziert hätte es ein token repräsentiert einen Benutzer-account für eine begrenzte Zeit.
OAuth scheint mir ideal für (2) mit dem workflow zu bekommen ein token, Umleitung auf die website, wo die Benutzer Ihre Anmeldeinformationen zu autorisieren und dann mit diesem token identifiziert/authentifiziert sich die Anwendung und die Benutzer.
Jedoch, von dem, was ich gelesen habe, ich weiß nicht, ob es geeignet ist für (1) - also ist es eine Möglichkeit, die OAuth verwendet werden kann nur zu identifizieren, die die aufrufende Anwendung, ohne eine gültige Benutzer-spezifischen token und somit nicht brauchen, um auf eine Webseite weitergeleitet, die für Sie, Ihre Anmeldeinformationen einzugeben?
InformationsquelleAutor der Frage Greg Beech | 2009-04-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, die Lebensdauer des Tokens gesetzt werden können, nicht verfallen, bis Sie so sagen. So würden Sie (manuell) die komplette Authentifizierung und Autorisierung, und speichern die autorisierten token für die spätere Verwendung.
(Sie können der test-clientum Ihnen eine vollständige, manuelle Teil, oder während Sie implementieren die server selbst: die Verwendung eines sogenannten zwei-legged OAuth.)
InformationsquelleAutor der Antwort Arjan
Tatsächlich gibt es zwei OAuth-Spezifikationen, die 3-beinige version und der 2-legged-version. Das 3-legged-version ist die, meiste Aufmerksamkeit bekommt.
Dem 2-Bein version, die genau das tut, was Sie will zunächst ermöglicht es eine Anwendung zu gewähren, Zugang zu einem anderen entweder über einen gemeinsamen geheimen Schlüssel (sehr ähnlich zu Amazons Web-Service-Modell, verwenden Sie den HMAC-SHA1-signing-Verfahren) oder über eine public/private-key-system (Signaturen verwenden Methode: RSA-SHA1). Die schlechte Nachricht ist, dass es nicht annähernd so gut unterstützt, doch als die 3-beinigen version noch nicht, so haben Sie möglicherweise ein bisschen mehr Arbeit, als Sie sonst vielleicht müssen Recht jetzt.
Grundsätzlich 2-legged OAuth gibt nur einen Weg, um "Zeichen" (compute-hash über) mehrere Felder enthalten das aktuelle Datum, eine Zufallszahl als "nonce" und die Parameter Ihrer Anfrage. Dies macht es sehr schwer zu imitieren Anforderungen an den Webdienst.
OAuth ist langsam aber sicher einen anerkannten standard für diese Art der Sache -- Sie werden am besten aus, wenn Sie es umarmen, denn die Leute können, dann nutzen Sie die verschiedenen libraries (Bibliotheken) zur Verfügung, dies zu tun.
Bekommen, sowohl 2-beinige und 3-beinige gleichzeitig zu arbeiten ist etwas tricky-aber es ist möglich (Google hat es funktioniert jetzt).
http://code.google.com/apis/accounts/docs/OAuth.html
InformationsquelleAutor der Antwort Chris Harris
Greg:
Arbeite ich an einer Erweiterung, um die OAuth-core, ich denke, eine Antwort geben, die Sie brauchen. Wir wollten, Anwendungen zu schreiben, die gegen unsere eigene API, aber wir fühlten, dass es nicht viel Sinn, nicht zulassen, dass unsere eigenen Anwendungen (Dienstleister) zu sammeln, die Zugangsdaten direkt von den Anwender /consumer-Anwendung - da wir bereits als einen vertrauenswürdigen Partei zu uns.
Durch die Erweiterung wird für den 1., 2., und natürlich 3rd-party (traditionelle OAuth), während die mit dem security-Token und secrets und Signatur, etc..., die das Protokoll bietet.
Unserer beta-Dokumentation über die Erweiterung finden hier.
InformationsquelleAutor der Antwort Nick
Wenn es nur über die server-zu-server-Kommunikation, würde ich erwägen, die Autorisierung basierend auf API-Schlüssel - genau wie bit.ly oder FriendFeed.
InformationsquelleAutor der Antwort arikfr