2011-10-24 17 views
12

Buduję aplikację internetową, która musi działać w trybie offline. System jest zbudowany w celu przechwytywania transakcji sprzedaży. Większość części "offline" jest dość prosta - po prostu muszę przechowywać dane lokalnie i zsynchronizować je po powrocie do sieci. Jak na razie dobrze.Uwierzytelnianie użytkownika w aplikacjach internetowych offline

Problem dotyczy uwierzytelniania. Aplikacja będzie działać na współdzielonej maszynie z jednym kontem użytkownika systemu operacyjnego. Jeśli jestem offline, w jaki sposób mogę uwierzytelnić użytkownika?

Użytkownicy nie mają żadnych prywatnych danych, które będę musiał posegregować (tj. Nie muszę ich chronić przed klientem). Muszę być w stanie zweryfikować swoje hasło, aby umożliwić innym użytkownikom zalogowanie się przez cały dzień, nawet jeśli połączenie nie działa.

Jedna z metod, o której myślę, polega na buforowaniu skrótów haseł po stronie klienta w IndexedDB. Tylko ograniczona grupa użytkowników będzie mogła logować się z określonego współdzielonego komputera, więc nie będę musiał lokalnie buforować mojej bazy danych wszystkich haseł. Zakładając, że mam dobrą politykę haseł (wymagania dotyczące złożoności i wygasania) w miejscu, a same skróty są bezpieczne (bcrypt), jak okropny jest pomysł?

Czy mam jakieś inne opcje?

+0

Z tego, co przeczytałem, wygaśnięcie hasła może być bardziej szkodliwe niż pomocne - http://www.cryptosmith.com/node/218 Chociaż może to nie być prawdą, jeśli ujawniasz swoją bazę danych. –

Odpowiedz

9

W ten sposób system Windows (i inne systemy) działają, gdy komputer nie jest w stanie połączyć się z kontrolerem domeny (np. Zabiera się laptopa roboczego do samolotu i wymaga zalogowania się do laptopa bez łączności). Twój komputer zapisał pamięć podręczną twojej nazwy użytkownika | hasło i umożliwi ci dostęp do tych danych, nawet jeśli jest offline.

Ogólnie rzecz biorąc przechowywanie skrótów nazwy użytkownika | hasła jest całkiem bezpieczne, zakładając, że masz je w rozsądny sposób (np. Używając soli, używając IV, itd.). Jedna ekspozycja, którą chcesz przemyśleć, to "ucieczka" pliku hasha. Jeśli są to wrażliwe dane, będziesz bardzo ostrożny - a to może nie być nawet akceptowalne, ale jeśli nie są to bardzo wrażliwe dane, to prawdopodobnie jesteś w porządku: z dobrym hashu uważam, że powinieneś być rozsądny (ale na pewno nie całkowicie) bezpieczny.

1

Być może jest to trochę niepowiązane, ale używam tego podejścia w moim projekcie nodejs. Gdy użytkownik jest uwierzytelniany przy użyciu nazwy użytkownika i hasła, przypisuje mu unikalny klucz API używany tylko w tej konkretnej sesji.

Każdy użytkownik może mieć tylko jeden klucz API.

Ten klucz API jest dodawany do każdego żądania wykonanego na serwerze w celu uwierzytelnienia użytkownika.

Po wylogowaniu użytkownika klucz API zostaje usunięty. Również klucz API może być wyczyszczony na serwerze, co sprawia, że ​​użytkownik uwierzytelnia się na serwerze jeszcze raz.

Mogę podać linki do programów open source nodejs, które wykorzystują to podejście, jeśli jesteś zainteresowany.

+0

Byłbym z pewnością zainteresowany, proszę podać link, jeśli nadal chce to zrobić. – GojiraDeMonstah

+0

podając ten klucz APi, ramy czasowe to także dobra praktyka – Serdar

+0

ten post jest dobrym źródłem do przeczytania http://www.staticapps.org/articles/authentication-and-authorization – Serdar

Powiązane problemy