Wir bauen einen Rest-Service auf und möchten OAauth 2 für die Autorisierung verwenden. Der aktuelle Entwurf (v2-16 vom 19. Mai) beschreibt vier Zuschussarten . Sie sind Mechanismen oder Abläufe zum Erhalten der Autorisierung (ein Zugriffstoken).
- Autorisierungscode
- Implizite Gewährung
- Anmeldeinformationen des Ressourcenbesitzers
- Client-Anmeldeinformationen
Es scheint, dass wir alle vier unterstützen müssen, da sie unterschiedlichen Zwecken dienen. Die ersten beiden (und möglicherweise die letzte) können von Apps von Drittanbietern verwendet werden, die Zugriff auf die API benötigen. Der Autorisierungscode ist die Standardmethode zum Autorisieren einer Webanwendung, die das Glück hat, sich auf einem sicheren Server zu befinden, während der implizite Grant-Flow die Wahl für eine Client-Anwendung ist, die ihre Anmeldeinformationen nicht ganz vertraulich behandeln kann (z. B. mobil / Desktop) Anwendung, JavaScript-Client usw.).
Wir möchten den dritten Mechanismus selbst verwenden, um eine bessere Benutzererfahrung auf Mobilgeräten zu erzielen. Anstatt den Benutzer zu einem Anmeldedialog in einem Webbrowser usw. zu führen, gibt der Benutzer einfach seinen Benutzernamen und sein Kennwort direkt in die Anwendung ein und Login. Wir möchten auch den Grant-Typ "Client-Anmeldeinformationen" verwenden, um ein Zugriffstoken zu erhalten, mit dem öffentliche Daten angezeigt werden können, die keinem Benutzer zugeordnet sind. In diesem Fall handelt es sich nicht so sehr um eine Autorisierung, sondern um einen API-Schlüssel, mit dem wir nur auf Anwendungen zugreifen, die sich bei uns registriert haben. Auf diese Weise können wir den Zugriff bei Bedarf widerrufen.
Meine Fragen sind also:
- Denken Sie, ich habe den Zweck der verschiedenen Zuschussarten richtig verstanden?
- Wie können Sie Ihre Kundenanmeldeinformationen vertraulich behandeln? Sowohl im dritten als auch im vierten Fall müssen wir die Client-ID und das Client-Geheimnis irgendwo auf dem Client haben, was nicht nach einer guten Idee klingt.
- Selbst wenn Sie den impliziten Grant-Typ verwenden und Ihr Client-Geheimnis nicht preisgeben, was hindert eine andere Anwendung daran, sich als App mit demselben Autorisierungsmechanismus und derselben Client-ID auszugeben?
Zusammenfassend möchten wir in der Lage sein, die Clientanmeldeinformationen und Ressourcenanmeldeinformationen zu verwenden, die aus einer Clientanwendung stammen. Für beide Flows müssen Sie das Client-Geheimnis irgendwie speichern, aber der Client ist eine mobile oder JavaScript-Anwendung, sodass diese leicht gestohlen werden können.