2009-12-18 63 views
151

Nếu tôi muốn lưu tên người dùng và mật khẩu để sử dụng trong ứng dụng Android, cách tốt nhất để làm điều đó là gì? Có phải thông qua màn hình sở thích (nhưng nếu người dùng bỏ lỡ điều này?), Hoặc bật lên một hộp thoại và yêu cầu người dùng cho các thông tin đăng nhập? Nếu vậy, tôi phải duy trì trạng thái cho đơn đăng ký. Làm thế nào tôi sẽ làm điều này?Android: Lưu trữ tên người dùng và mật khẩu?

+2

http://stackoverflow.com/a/786588/1166727 Kiểm tra những gì @RetoMeier (Tech Chì Phát triển Android tại Google) có nói về vấn đề này. –

+0

Nếu bạn đang tìm cách an toàn nhất để lưu trữ thông tin xác thực.Đọc câu trả lời này http://stackoverflow.com/a/20560574/730807 –

+2

@Giảm cách bạn giải quyết vấn đề của mình? – Erum

Trả lời

96

Hầu hết các ứng dụng Android và iPhone tôi đã thấy sử dụng màn hình hoặc hộp thoại ban đầu để yêu cầu thông tin đăng nhập. Tôi nghĩ rằng nó là cồng kềnh cho người sử dụng phải nhập lại tên/mật khẩu của họ thường xuyên, do đó, lưu trữ thông tin đó có ý nghĩa từ một góc nhìn khả năng sử dụng.

Lời khuyên từ (Android dev guide) là:

Nói chung, chúng tôi khuyên bạn nên giảm thiểu tần suất yêu cầu người sử dụng thông tin - để làm cho các cuộc tấn công lừa đảo dễ thấy hơn, và ít khả năng thành công. Thay vào đó, hãy sử dụng mã thông báo ủy quyền và làm mới mã thông báo.

Nếu có thể, tên người dùng và mật khẩu sẽ không được lưu trữ trên thiết bị . Thay vào đó, hãy thực hiện xác thực ban đầu bằng tên người dùng và mật khẩu do người dùng cung cấp, sau đó sử dụng mã thông báo ủy quyền dành riêng cho dịch vụ ngắn hạn, .

Sử dụng AccountManger là tùy chọn tốt nhất để lưu trữ bằng chứng xác thực. SampleSyncAdapter cung cấp một ví dụ về cách sử dụng nó.

Nếu đây không phải là một tùy chọn cho bạn vì một số lý do, bạn có thể quay trở lại bằng chứng xác thực bền vững bằng cách sử dụng cơ chế Preferences. Các ứng dụng khác sẽ không thể truy cập các tùy chọn của bạn, vì vậy thông tin của người dùng không dễ bị lộ ra.

+36

Tôi sẽ nói mạo hiểm để duy trì thông tin mật khẩu như trong sở thích. Trên điện thoại bắt nguồn từ, bạn có thể truy cập tệp tùy chọn của một ứng dụng. Ít nhất bạn có thể làm là làm xáo trộn mật khẩu. – Jayesh

+44

Nếu ai đó có điện thoại của bạn và có thể root nó, không có nhiều thứ bạn có thể làm để giữ cho dữ liệu của bạn an toàn. Nó không phải là một ý tưởng tồi để làm xáo trộn mật khẩu, nhưng nó không thực sự bổ sung thêm sự bảo vệ nhiều hơn nữa. Điều quan trọng hơn là có nhiều lớp bảo mật đã được tích hợp trong hệ điều hành. Tất nhiên, bạn không muốn làm bất cứ điều gì ngu ngốc để phá vỡ những biện pháp đó. Tốt hơn nên sử dụng hệ thống như OAuth và lưu trữ mã thông báo trên thiết bị thay vì tên người dùng và mật khẩu. – elevine

+0

Cũng thấy câu hỏi này [link] (http: // stackoverflow.com/questions/785973/what-is-the-the-thích-nhất-cách-to-store-user-settings-in-android-application) – Diederik

8

Bạn nên sử dụng Android AccountManager. Đó là mục đích xây dựng cho kịch bản này. Đó là một chút cồng kềnh nhưng một trong những điều nó làm là vô hiệu hóa các thông tin địa phương nếu thẻ SIM thay đổi, vì vậy nếu ai đó vuốt điện thoại của bạn và ném một SIM mới vào đó, thông tin đăng nhập của bạn sẽ không bị xâm phạm.

Điều này cũng cung cấp cho người dùng cách nhanh chóng và dễ dàng để truy cập (và có khả năng xóa) thông tin đăng nhập được lưu trữ cho bất kỳ tài khoản nào họ có trên thiết bị, tất cả từ một nơi.

SampleSyncAdapter (như @Miguel được đề cập) là ví dụ sử dụng thông tin đăng nhập tài khoản được lưu trữ.

+2

Tài liệu quản lý tài khoản sẽ "vô hiệu hóa thông tin đăng nhập cục bộ nếu thẻ SIM thay đổi" ở đâu? – elevine

+0

Nó không phải là tôi biết. Tuy nhiên, đó là điều tôi đã tin tưởng/chấp nhận/hiểu sau khi một số người dùng ứng dụng của tôi gặp sự cố xác thực sau khi hoán đổi SIM. –

+0

Tôi không nhìn thấy nó trong mã JavaDocs hoặc AccountManager. Nghe có vẻ như một tính năng tốt, nó sẽ chỉ là tốt đẹp để xác minh nó và hiểu các chi tiết. – elevine

7

Tôi nghĩ cách tốt nhất để bảo mật thông tin của bạn là trước tiên hãy nghĩ đến việc lưu trữ Mật khẩu bằng mã hóa trong tệp account.db mà không thể dễ dàng có sẵn trong các thiết bị không bắt nguồn từ và trong trường hợp thiết bị bị root chìa khóa để giải mã nó.

Tùy chọn khác là thực hiện tất cả xác thực của bạn giống như cách Gmail đang thực hiện. sau lần xác thực đầu tiên với máy chủ Gmail. bạn có Mã thông báo xác thực sẽ được sử dụng trong trường hợp mật khẩu của bạn. mã thông báo đó sẽ được lưu trữ ở dạng văn bản thuần túy. Mã thông báo này có thể sai trong trường hợp bạn thay đổi mật khẩu từ Máy chủ.

tùy chọn cuối cùng tôi khuyên bạn nên bật Xác thực 2 yếu tố & tạo Mật khẩu dành riêng cho thiết bị cho thiết bị của bạn. Sau khi mất thiết bị, tất cả những gì bạn cần là tắt thiết bị đó.

+2

Bạn có thể đăng nguồn tin cho biết rằng tài khoản.db được mã hóa không? Hay bạn nói mật khẩu cụ thể nên được mã hóa? –

+0

@Riz, nơi lưu trữ khóa để mã hóa sau đó ... vì ứng dụng của tôi hoạt động mà không có Internet, vì vậy không thể tải nó từ mạng – eRaisedToX

1

Thông tin tại http://nelenkov.blogspot.com/2012/05/storing-application-secrets-in-androids.html là phương pháp tiếp cận dựa trên thực tế, nhưng "sử dụng-ẩn-android-apis". Đó là một cái gì đó để xem xét khi bạn thực sự không thể có được xung quanh lưu trữ thông tin đăng nhập/mật khẩu cục bộ trên thiết bị.

Tôi cũng đã tạo một ý chính đã được làm sạch của ý tưởng đó tại https://gist.github.com/kbsriram/5503519, điều này có thể hữu ích.

2

Với sự mới (Android 6.0) phần cứng vân tay và API bạn có thể làm điều đó như trong this ứng dụng mẫu github.

+6

Dự án mẫu được tham chiếu tạo khóa trong Kho lưu trữ Android và sử dụng nó để tạo mật mã được mã hóa Mật khẩu. Mật mã và mật mã được mã hóa được lưu trữ dưới dạng chuỗi được mã hóa base64 trong các tùy chọn được chia sẻ. Sau khi xác thực vân tay thành công, khóa bí mật được truy xuất từ ​​Kho lưu trữ Android và được sử dụng với mật mã đã giải mã để giải mã mật khẩu đã giải mã. – mjwheat

+0

@mjwheat điều này rất hữu ích để hiểu những gì đang xảy ra trong ví dụ. Cảm ơn! Một lỗi nhỏ: "... để giải mã mật khẩu được mã hóa." – muetzenflo

2

Chúng được xếp hạng theo số thứ tự khó khăn để ngắt thông tin ẩn của bạn.

  1. Store trong dạng cleartext

  2. Lưu trữ được mã hóa bằng cách sử dụng đối xứng chính

  3. Sử dụng Android Keystore

  4. nhớ được mã hóa sử dụng các phím bất đối xứng

nguồn: Where is the best place to store a password in your Android app

Bản thân kho khóa được mã hóa bằng mã khóa/mật khẩu khóa của người dùng, do đó, khi màn hình thiết bị khóa Keystore không khả dụng. Hãy ghi nhớ điều này nếu bạn có một dịch vụ nền có thể cần truy cập bí mật ứng dụng của bạn.

nguồn: Simple use the Android Keystore to store passwords and other sensitive information

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