Ich entwickle eine REST-API, die eine Authentifizierung erfordert. Da die Authentifizierung selbst über einen externen Webservice über HTTP erfolgt, habe ich argumentiert, dass wir Token ausgeben würden, um zu vermeiden, dass der Authentifizierungsdienst wiederholt aufgerufen wird. Was mich ordentlich zu meiner ersten Frage bringt:
Ist dies wirklich besser, als nur von Clients zu verlangen, dass sie bei jeder Anforderung HTTP Basic Auth verwenden und Aufrufe an den serverseitigen Authentifizierungsdienst zwischenspeichern?
Die Basic Auth-Lösung bietet den Vorteil, dass kein vollständiger Roundtrip zum Server erforderlich ist, bevor mit der Anforderung von Inhalten begonnen werden kann. Tokens können möglicherweise flexibler sein (dh nur Rechte für bestimmte Ressourcen oder Aktionen gewähren), aber dies scheint für den OAuth-Kontext angemessener zu sein als mein einfacherer Anwendungsfall.
Derzeit werden Token wie folgt erworben:
curl -X POST localhost/token --data "api_key=81169d80...
&verifier=2f5ae51a...
×tamp=1234567
&user=foo
&pass=bar"
Die api_key
, timestamp
und verifier
werden von allen Anfragen erforderlich. Der "Verifizierer" wird zurückgegeben von:
sha1(timestamp + api_key + shared_secret)
Meine Absicht ist es, nur Anrufe von bekannten Teilnehmern zuzulassen und zu verhindern, dass Anrufe wörtlich wiederverwendet werden.
Ist das gut genug Underkill? Overkill?
Mit einem Token in der Hand können Kunden Ressourcen erwerben:
curl localhost/posts?api_key=81169d80...
&verifier=81169d80...
&token=9fUyas64...
×tamp=1234567
Für den einfachsten möglichen Anruf scheint dies schrecklich ausführlich zu sein. Wenn man bedenkt, dass der shared_secret
Wille in (mindestens) eine iOS-Anwendung eingebettet wird, von der ich annehmen würde, dass sie extrahiert werden kann, bietet dies überhaupt etwas, das über ein falsches Sicherheitsgefühl hinausgeht?