2013-05-28 26 views
48

Tôi nên lưu trữ mã thông báo nào khi người dùng đăng nhập vào dịch vụ? Tôi không lưu mật khẩu (rõ ràng là nơi tôi sẽ sử dụng Keychain) nhưng chỉ là mã thông báo. Rất nhiều nơi nói chỉ sử dụng NSUserDefaults nhưng một số người trên StackOverflow có vẻ thực sự quan tâm đến Keychain.Lưu trữ mã thông báo xác thực trên iOS - NSUserDefaults và Keychain?

NSUserDefaults có ổn không?

+3

Dữ liệu được lưu trữ bằng cách sử dụng 'NSUserDefaults' có thể dễ dàng đọc được ngay cả trên thiết bị không được bẻ khóa. Nếu bảo mật là một mối quan tâm với bạn, sau đó tôi sẽ lưu trữ dữ liệu trong Keychain. Bạn dự định tồn tại mã thông báo xác thực của mình trong bao lâu? –

+0

Bạn có thể lấy ý tưởng cơ bản về triển khai nhanh từ [ở đây] (https://gist.github.com/anishparajuli555/dedfdd4aea836de49ac52d13a45a8f84) –

Trả lời

72

Tôi rất muốn giới thiệu bạn sử dụng móc khóa - đó chính xác là những gì Facebook làm để lưu trữ mã thông báo phiên của họ.

NSUserDefaults không an toàn hoặc được mã hóa - có thể dễ dàng mở và đọc, cả trên thiết bị và khi được đồng bộ hóa với máy Mac. Vì vậy, mặc dù người dùng mặc định là một nơi tốt cho những thứ như sở thích và thông tin cấu hình, nó không phải là một nơi tốt cho bất cứ điều gì nhạy cảm, như mật khẩu.

Mã phiên nên hầu như luôn được xử lý giống như mật khẩu, vì vậy bạn nên lưu trữ chúng an toàn trong móc khóa, nơi mã sẽ được mã hóa. Apple có một số mã mẫu (GenericKeychain) cho thấy việc triển khai cơ bản và bạn sẽ tìm thấy các ví dụ khác bằng cách tìm kiếm StackOverflow. Hy vọng đó là giúp bạn ra ngoài.

+2

Đây là một câu trả lời tuyệt vời. Cũng trong tài liệu của NSUserDefault. Nó nói rằng lớp là dành cho các sở thích, không phải để lưu trữ thông tin đăng nhập an toàn. – Tony

+0

Đây là một chủ đề SO khác có thư viện tuyệt vời để đơn giản hóa việc truy cập KeyChain: http://stackoverflow.com/a/13641196/380837 – Jaroslav

20

Cần xem xét sử dụng Lockbox. Nó thực sự đơn giản hóa giao tiếp với Keychain.

+6

[UICKeyChainStore] (https://github.com/kishikawakatsumi/UICKeyChainStore) cũng đáng để nói. – lukestringer90

+1

Đồng ý với @Mike, Lockbox đã đơn giản hóa rất nhiều vấn đề cho tôi. –

Các vấn đề liên quan