Ist es möglich, oauth unter iOS sicher zu machen?
Ich untersuche OAuth 2.0 als Mittel zur Implementierung von Single Sign- + Autorisierung für eine "Suite" von iOS-Apps. Um meine Bedenken zu erklären, werde ich Facebook + eine 3rd-Party-App vereinfachen und verwenden, die Facebook zur Authentifizierung verwendet (sagen wir Worte / "Words with Friends").
Zum Beispiel nehme ich an, dass Facebook sich registriert, um das Schema / Protokoll "facebook: //" zu unterstützen, und dass Words sich registriert, um "words: //"
zu unterstützenIch nehme auch an, dass es nicht möglich ist, das "Client-Secret" oder das Protokoll in einer iOS-Anwendung zu sichern, weil Sie die Anwendung dekompilieren können. Alle Möglichkeiten, die ich gefunden habe, um dies zu sichern, resultieren in Sicherheit durch Dunkelheit .
Eine weitere Annahme ist, dass es keine Möglichkeit gibt, zu verhindern, dass sich zwei Anwendungen registrieren, um dasselbe Protokoll zu behandeln. Das Verhalten, wenn zwei Apps für dasselbe Protokoll registriert sind, ist unbestimmt. (Obwohl anscheinend die erste auf dem Gerät zu startende Anwendung registriert wird, während die zweite Registrierung ignoriert wird)
Wenn ich den Workflow zwischen Facebook (User-Agent) und Words (Client) auf dem iOS-Gerät verstehe:
Wenn das oben Gesagte korrekt ist, wenn ich böswillig sein und auf die Freundesliste von zufälligen Personen zugreifen möchte, könnte ich eine Anwendung erstellen, die sich ebenfalls registriert, um das Protokoll "words: //" zu handhaben und es im App Store abzurufen. Wenn jemand meine App und meine Wörter installiert hat und meine App erfolgreich registriert wurde (d. H. Auf dem Gerät vor Word gestartet wurde), dann:
Ich hoffe, dass meine Argumentation oben fehlerhaft ist oder dass ich (speziell) feststellen müsste, dass die Facebook iOS-Authentifizierung für Apps von Drittanbietern unsicher ist.
Allgemeiner ist es möglich, OAuth 2.0 (Workflows zur Autorisierung / impliziten Vergabe) sicher in iOS-Anwendungen zu implementieren?
Google hat eine experimentelle Lösung für dieses Problem gefunden, die OAuth 2.0 für installierte Anwendungen .
Der Google OAuth 2.0-Endpunkt unterstützt Anwendungen, die auf einem Gerät installiert sind ... Es wird davon ausgegangen, dass diese Anwendungen keine Geheimnisse aufbewahren können.
Im Wesentlichen wird das gemeinsame Geheimnis als nicht geheim behandelt.
Zum Zeitpunkt dieses Artikels scheinen die meisten OAuth 2.0-Server dieses experimentelle Design nicht zu unterstützen.
Dieses Design stellt das Risiko dar, dass ein Angreifer einen neuen Client erstellen kann, der sich als Ihre Anwendung für den Autorisierungsserver darstellt (der Angreifer muss die Client-ID wie in Ihrer Frage beschrieben anfordern oder einer der Techniken folgen) vorgeschlagen hier ).
Dieses Risiko scheint jedoch durch die Tatsache gemildert zu werden, dass es unwahrscheinlich ist, dass der Ressourcenbesitzer (der Benutzer) die bösartige Anwendung autorisiert, irgendwelche Maßnahmen bezüglich geschützter Ressourcen zu ergreifen, da er weiß, dass die Anwendung dies nicht ist. in der Tat, Ihre Anwendung.