2012-11-18 16 views
8

Buduję aplikację internetową offline kierowaną na iPhone'a i inne urządzenia mobilne. Czy istnieje sposób, w jaki możemy zachować uwierzytelnianie użytkownika za pomocą magazynu lokalnego WebSql?Jak zalogować się do aplikacji internetowej w trybie offline?

Więc kiedy otworzyć aplikację internetową, podczas gdy to jest zalogowany, chcę Albo użytkownik może zalogować się już lub użytkownik powinien móc zalogować.

+2

Interesujące pytanie, oznacza to, że będziesz musiał przechowywać referencje użytkownika lokalnie, co nie jest bardzo bezpieczne. Zastanawiam się, czy istnieje jakiś bezpieczny sposób lub najlepsze praktyki, aby to osiągnąć. –

+1

Po prostu coś do przemyślenia - jeśli sprawdzanie poświadczeń jest z definicji wykonywane na kliencie w javascript, byłoby trywialne, gdyby ktoś emulował/ominął uwierzytelnianie przez manipulowanie właściwościami js w aplikacji. Załóżmy na przykład, że dane po stronie klienta zostały zsynchronizowane z serwerem po powrocie do trybu online, może to spowodować problemy. – user888734

Odpowiedz

1

Jeśli dobrze rozumiem pytanie, to jak mogłeś zrobić:

po zalogowaniu (online):

  • uwierzytelnić na serwerze, czy jest to poprawne, zapisać nazwę użytkownika i hasło (zaszyfrowaną na przykład za pomocą Crypto JS) w bazie danych WebSql.
  • Jeśli konto już istnieje w lokalnej bazie danych, wygeneruj nowy skrót, na wypadek gdyby użytkownik zmienił swoje hasło od ostatniego logowania.

Po zalogowaniu (offline):

  • uwierzytelnić lokalnej bazy danych.

Oczywiście będzie to wymagać od użytkowników zalogowania się przy użyciu wersji online co najmniej raz przed zalogowaniem się lokalnie. Tak dzieje się na przykład w Windows 8, gdy ktoś próbuje zalogować się na swoje konto Microsoft, gdy jest odłączony.

1

Nie wiem, jak przechowywać lub używać danych o stanie klienta (keychain in iOS również w Android), ale z perspektywy aplikacji internetowej nie trzeba nic robić. Nie musisz nic robić, bo jeśli możesz to nie jest bezpieczne. Po zalogowaniu serwer ustawi HTTP only cookie, który będzie dostępny przez kilka dni lub tygodni. W tym czasie żądanie with credentials na serwer jest zawsze uwierzytelniane przez przeglądarkę. Możesz poprosić o e-mail logowania lub cokolwiek z serwera. W celu dodatkowego zabezpieczenia serwer może zażądać XSRF token. W takim przypadku zapisz go w localStorage. Utrata tego żetonu oznacza niewiele.

Jest to najbezpieczniejszy sposób i jest również używany przez klientów mobilnych, w tym bankowość internetową za pośrednictwem WebView. Używanie przeglądarki do uwierzytelniania jest najbezpieczniejsze i najłatwiejsze, ponieważ istnieje wiele słabych punktów, takich jak przechowywanie danych uwierzytelniających, sprawdzanie poprawnych certyfikatów SSL, szyfrowanie itp. W przeglądarce internetowej wszystko jest obsługiwane przez przeglądarkę.

Jeśli są Państwo zainteresowani tym, jak te kody serwerów są, miałem wytłumaczenie z Appengine cross domain authentication server code.