2008-12-09 11 views
8

Buduję aplikację na iPhone'a, która komunikuje się z backendem Ruby on Rails. Aplikacja Ruby on Rails będzie również obsługiwać użytkowników sieci. Wtyczka restful_authentication to doskonały sposób na szybkie i konfigurowalne uwierzytelnianie użytkowników. Chciałbym jednak, aby użytkownicy aplikacji na iPhone mieli konto utworzone automatycznie przez unikalny identyfikator telefonu ([[urządzenie UIDevice] uniqueIdentifier]) przechowywane w nowej kolumnie. Później, gdy użytkownicy będą gotowi do utworzenia nazwy użytkownika/hasła, konto zostanie zaktualizowane tak, aby zawierało nazwę użytkownika i hasło, pozostawiając nienaruszony unikatowy identyfikator iPhone'a. Użytkownicy nie powinni mieć dostępu do witryny, dopóki nie skonfigurują swojej nazwy użytkownika/hasła. Mogą jednak korzystać z aplikacji na telefon iPhone, ponieważ aplikacja może się uwierzytelnić za pomocą swojego identyfikatora.Jaki jest najlepszy sposób na rozszerzenie restful_authentication/AuthLogic na obsługę leniwych loginów przez anonimowego iPhone'a?

Jaki jest najlepszy sposób modyfikacji restful_authentication w tym celu? Utwórz wtyczkę? Lub zmodyfikować wygenerowany kod?

Co z alternatywnymi ramami, takimi jak AuthLogic. Jaki jest najlepszy sposób na umożliwienie iPhonom wygenerowania wygenerowanego tokena uwierzytelnionego na swoich UUID, ale czy później użytkownik może utworzyć nazwę użytkownika/hasło?

+0

Naprawdę nie jest to odpowiedź, ale coś więcej do przemyślenia: w jaki sposób projekt może obsłużyć przypadek, w którym ktoś ma konto iPhone, rejestruje konto użytkownika/hasło na stronie niezależnie, a następnie chce połączyć oba konta? – Stobor

+0

Zrobiłem kilka dalszych przemyśleń na temat tego problemu, i chociaż muszę jeszcze znaleźć rozwiązanie, które mnie satysfakcjonuje, próbowałem kilku rzeczy. Utworzenie anonimowego konta z losową nazwą użytkownika/hasłem powiązanego z obiektem Device nieco działa. Wymaga to jednak, aby urządzenie otrzymało nazwę użytkownika/hasło podczas tworzenia i zapisało je. Problem z tym rozwiązaniem polega na tym, że strona jest następnie zaśmiecona anonimowymi kontami (łatwo można je naprawić, mając pole typu konta w nazwie użytkownika Anonymous, które można następnie odfiltrować w razie potrzeby). To rozwiązanie działa, ale nie jest świetne. –

Odpowiedz

6

myślę, że nie powinno się używać sam identyfikator telefonu do uwierzytelniania, ponieważ nie jest tajemnicą, i to chyba też odgadnięcia/przewidywalne. Nie zapominaj, że jeśli ktoś chciałby włamać się do twojej aplikacji internetowej, nie musi używać twojego kodu - może po prostu odgadnąć identyfikatory urządzeń i spróbować zepsuć dane użytkowników za pomocą dowolnego klienta WWW.

Należy traktować identyfikator urządzenia podobny do nazwy użytkownika - służy on do identyfikacji, a nie do uwierzytelniania. Proponuję, aby użytkownik wybrał hasło, lub jeszcze lepiej wygenerował losowy kod automatycznie, aby przejść z nim - następnie wyślij identyfikator urządzenia + to hasło/kod, aby najpierw zarejestrować urządzenie, a następnie uwierzytelnić urządzenie.

Można również założyć, że niektórzy użytkownicy będą mieć więcej niż jedno urządzenie - albo będą one zastąpić jednym końcu, albo dostaniesz kogoś takiego jak Stephen Fry, który odchodzi z 4 iPhone. Aby sobie z tym poradzić, sugerowałbym, aby szukać sposobu na utworzenie polecenia restful_authentication dwa razy, jeden raz na uwierzytelnianie użytkowników i drugi raz na uwierzytelnianie urządzeń. Nie użyłem tej wtyczki, ale spodziewam się, że po prostu musisz użyć różnych parametrów tabeli, aby to się stało. Następnie w logice aplikacji użytkownicy mogą kojarzyć więcej niż jedno urządzenie ze swoim kontem.

Aby to zrobić bezpiecznie, zrób to z urządzenia lub poproś urządzenie, aby wyświetliło losowy kod, który następnie wchodzi do aplikacji internetowej, aby udowodnić, że jest właścicielem urządzenia (brzmi to bardziej bolesnie niż jest - jest takie samo Przetwórz to jabłko w iTunes, Apple TV i aplikacji zdalnej - zobacz, jak to robią - więc nie będzie to dla użytkowników zaskakujące).

(Upewnij się także, że podczas generowania dowolnych losowych haseł używasz generatora liczb losowych kryptograficznych jako podstawy - prawdopodobnie jest to interfejs API iPhone'a - w przeciwnym razie twoje hasła mogą być przewidywalne).

+0

Dzięki Franks. To świetna rada na temat systemu zabezpieczeń do autoryzacji urządzeń. Nie jest to odpowiedź na moje pytanie dotyczące techniki modyfikacji restful_authentication. Myślę, że wychowujesz jednak kilka doskonałych punktów! –

+0

cóż, sugeruję, żebyś nie modyfikował restful_authentication - przemyśl schemat, aby móc użyć dwóch różnych jego instancji - jednego do uwierzytelnienia urządzeń i drugiego do identyfikacji użytkowników. Dodatkowo logika aplikacji umożliwiająca powiązanie urządzeń N z użytkownikiem. – frankodwyer

+0

Czy masz jakieś sugestie, jak to zrobić? –

0

Czy próbowałeś użyć innego schematu uwierzytelniania jak Authlogic? Zauważyłem, że restful_authentication jest dość inwazyjne (chociaż oszukałem przy użyciu bort).

+0

Tak, restful_authentication wydaje się dość inwazyjne. Rzucę okiem na Authlogic, chociaż wpadłem na tymczasową alternatywę, modyfikując restful_authentication bezpośrednio (ale to nie uaktualnia jej w przyszłości). –

0

wygenerować losowe hasło w Rails link text Używam plugin Restful_authentication dla jednego z moich projektów. W ramach procesu tworzenia mojego użytkownika, system powinien wygenerować losowe hasło dla nowego użytkownika.

0

Co sądzisz o użyciu identyfikatora UDID i losowego hasła wygenerowanego za pomocą UDID + soli zdefiniowanej w witrynie?

Coś jak:

salt = 'afG553Dvbf3' 

udid = '1234567890' 
pass = Digest::MD5.hexdigest(udid + salt) 

I wysłać to hasło do iPhone po raz kolejny, że łączy.

Powiązane problemy