2013-05-28 13 views
48

W którym miejscu mam przechowywać tokeny, gdy użytkownik loguje się do usługi? Nie zapisuję haseł (oczywiście tam, gdzie bym używał Keychaina), ale tylko tokena. Wiele miejsc mówi po prostu, że używają NSUserDefaults, ale niektórzy ludzie na StackOverflow wydają się naprawdę zainteresowani Keychainem.Przechowywanie tokenów uwierzytelniania w systemie iOS - NSUserDefaults vs Keychain?

Czy NSUserDefault jest w porządku?

+3

Dane przechowywane za pomocą 'NSUserDefaults' są łatwe do odczytania nawet na urządzeniach niehomiłowanych. Jeśli bezpieczeństwo jest dla ciebie problemem, to zapisałbym dane w pęku kluczy. Jak długo planujesz utrzymywać swój token autoryzacji? –

+0

Możesz uzyskać podstawowe informacje na temat implementacji swift3 z [tutaj] (https://gist.github.com/anishparajuli555/dedfdd4aea836de49ac52d13a45a8f84) –

Odpowiedz

72

Gorąco polecam korzystanie z pęku kluczy - to właśnie robi Facebook do przechowywania ich tokenów sesji.

NSUserDefaults nie jest bezpieczny ani szyfrowany - można go łatwo otworzyć i przeczytać zarówno na urządzeniu, jak i po zsynchronizowaniu z komputerem Mac. Podczas gdy domyślne ustawienia użytkownika to dobre miejsce na takie rzeczy jak preferencje i informacje konfiguracyjne, nie jest to dobre miejsce na nic wrażliwego, jak na przykład hasła.

Tokeny sesji powinny być prawie zawsze traktowane tak samo jak hasła, więc należy je bezpiecznie przechowywać w pęku kluczy, gdzie będą szyfrowane. Apple ma pewien przykładowy kod (GenericKeychain), który pokazuje podstawową implementację, a znajdziesz inne przykłady, wyszukując StackOverflow. Mam nadzieję, że ci pomogło.

+2

To jest świetna odpowiedź. Również w dokumentacji NSUserDefault. Mówi, że klasa służy do preferencji, a nie do przechowywania bezpiecznych danych logowania. – Tony

+0

Oto kolejny wątek SO ze świetną biblioteką ułatwiającą dostęp KeyChain: http://stackoverflow.com/a/13641196/380837 – Jaroslav

20

Warto spojrzeć na korzystanie z Lockbox. To naprawdę ułatwia współpracę z Keychain.

+6

[UICKeyChainStore] (https://github.com/kishikawakatsumi/UICKeyChainStore) również jest warta okrzyku. – lukestringer90

+1

Zgadzam się z @Mike, Lockbox znacznie uprościł problem dla mnie. –

Powiązane problemy