Ich baue eine iPhone-Anwendung, die mit einem Ruby on Rails-Backend kommuniziert. Die Ruby on Rails-Anwendung wird auch Web-Benutzer bedienen. Das restful_authentication-Plugin ist eine hervorragende Möglichkeit, um eine schnelle und anpassbare Benutzerauthentifizierung bereitzustellen. Ich möchte jedoch, dass Benutzer der iPhone-Anwendung ein Konto erstellen lassen, das automatisch über die eindeutige Kennung des Telefons ([[UIDevice device] uniqueIdentifier]) in einer neuen Spalte gespeichert wird. Später, wenn Benutzer bereit sind, einen Benutzernamen / ein Passwort zu erstellen, wird das Konto aktualisiert, um den Benutzernamen und das Passwort zu enthalten, wodurch die eindeutige ID des iPhones erhalten bleibt. Benutzer sollten erst dann auf die Website zugreifen können, wenn sie ihren Nutzernamen / ihr Passwort eingerichtet haben. Sie können jedoch die iPhone-Anwendung verwenden, da sich die Anwendung mithilfe ihrer Kennung authentifizieren kann.
Was ist der beste Weg, um restful_authentication zu modifizieren, um dies zu tun? Ein Plugin erstellen? Oder ändern Sie den generierten Code?
Was ist mit alternativen Frameworks wie AuthLogic? Wie kann iPhones am besten ein generiertes Authentifizierungs-Token erhalten, das an seine UUIDs gebunden ist, aber den Benutzer später einen Benutzernamen / ein Passwort erstellen lassen?
Ich denke, Sie sollten die Telefonkennung nicht zur Authentifizierung verwenden, da sie kein Geheimnis ist und wahrscheinlich auch vorhersehbar ist. Vergessen Sie nicht, dass jemand, der Ihre Web-App hacken wollte, seinen Code nicht verwenden muss - er kann nur Geräte-IDs erraten und versuchen, sich mit Ihren Benutzerdaten über einen beliebigen Web-Client zu messen.
Sie sollten die Geräte-ID ähnlich wie einen Benutzernamen behandeln - sie dient der Identifizierung und nicht der Authentifizierung. Ich schlage vor, dass Sie den Benutzer dazu bringen, ein Passwort zu wählen oder sogar einen zufälligen Code automatisch zu generieren. Senden Sie dann die Geräte-ID + dieses Passwort / Code, um das Gerät zuerst zu registrieren und anschließend das Gerät zu authentifizieren.
Sie können auch darauf wetten, dass einige Benutzer mehr als ein Gerät haben - entweder werden sie eines ersetzen, oder Sie werden jemanden wie Stephen Fry bekommen, der mit 4 iPhones unterwegs ist. Um dies zu beheben, schlage ich vor, dass Sie nach einer Möglichkeit suchen, um restful_authentication zweimal zu instanziieren, einmal zum Authentifizieren von Benutzern und ein zweites Mal zum Authentifizieren von Geräten. Ich habe dieses Plugin nicht benutzt, aber ich nehme an, dass Sie nur verschiedene Tabellenparameter verwenden müssen, um dies zu ermöglichen. Dann können Benutzer in Ihrer Anwendungslogik mehr als ein Gerät mit ihrem Konto verknüpfen.
Um dies sicher zu tun, tun Sie es entweder vom Gerät oder lassen Sie das Gerät einen zufälligen Code anzeigen, den sie dann in die Web-App eingeben, um zu beweisen, dass sie das Gerät besitzen (das klingt schmerzhafter als es ist - es ist der gleiche Prozess Diesen Apfel benutzen Sie in iTunes, Apple TV und der Remote-App - schauen Sie sich an, wie sie das machen - also wird es für die Benutzer nicht so überraschend sein.
(Achten Sie auch darauf, dass Sie beim Generieren von beliebigen Passwörtern einen kryptografischen Zufallszahlengenerator als Grundlage verwenden - dafür gibt es wahrscheinlich eine iPhone-API - andernfalls könnten Ihre Passwörter vorhersehbar sein).
Was denkst du über die Verwendung der UDID und ein zufälliges Passwort, das mit der UDID + einem standortweit definierten Salz erzeugt wurde?
Etwas wie:
%Vor%Wenn Sie das nächste Mal eine Verbindung herstellen, senden Sie das Passwort an das iPhone.
Tags und Links ruby iphone ruby-on-rails restful-authentication