2009-12-13 36 views
5

Nếu tôi đã tạo ứng dụng truy cập một số dữ liệu từ Gmail, Twitter và Facebook và tôi muốn người dùng chỉ có thể nhập thông tin xác thực của họ một lần và thiết lập lại sau một vài ngày hoặc vài tuần, cách tốt nhất để làm điều này, tự động, trong Ruby là gì?Lưu trữ mật khẩu cho API bên ngoài - Thực hành tốt nhất

tôi thấy rất nhiều người chỉ có một tập tin cấu hình của các thông tin khách hàng của họ '/ người sử dụng như sau:


gmail_account: username: myClient password: myClientsPassword 

Điều này có vẻ a) như nó rất không an toàn, và b) nó wouldn' t làm việc nếu tôi muốn lưu trữ loại thông tin này cho hàng ngàn người dùng. Cách được khuyến nghị để làm điều này là gì?

Tôi muốn có thể xây dựng giao diện trên các dịch vụ này, vì vậy phải nhập thông tin đăng nhập mỗi lần người dùng thực hiện giao dịch là không khả thi.

Trả lời

6

Nếu bạn gặp khó khăn với trách nhiệm pháp lý tiềm ẩn khi một hacker xâm nhập vào cơ sở dữ liệu/hệ thống tệp của bạn, hãy truy cập nó. Và trong tất cả sự công bằng, bạn cũng nên tiết lộ cho người dùng rằng mật khẩu của họ sẽ được lưu trữ trên hệ thống của bạn và để họ quyết định xem họ có muốn cung cấp cho chương trình của bạn mức độ tin cậy không.

Nhưng tại sao thực hiện điều này ngay từ đầu? Facebook Connect and Twitter & Google sử dụng OAuth không cần bạn lưu trữ mật khẩu người dùng. Tại một số thời điểm, cookie của người dùng sẽ hết hạn (hoặc họ sẽ cố gắng truy cập trang web của bạn từ một máy tính khác) và họ sẽ phải xác thực lại. Bạn không thể ngăn chặn xác thực lại - thay vào đó, bạn nên làm cho người dùng cuối dễ dàng xử lý nhất có thể.

1

Đây là cách nó hoạt động ví dụ cho fetcmailrc mà phải được chmod đến 600 (có thể đọc và ghi chỉ bởi chủ sở hữu của mình). Và có, nó chứa mật khẩu đơn giản.

6

Các dịch vụ như vậy đang cung cấp ủy quyền OpenAuth. Bạn được khuyến khích để có một cái nhìn vào nó.

2

Bảo mật

Tôi cho rằng ứng dụng của bạn cần biết mật khẩu trong văn bản thuần túy. Sau đó, không có cách nào để lưu trữ nó theo một cách đơn giản.

  • Lưu trữ trong một số loại cách được mã hóa, ví dụ: Base64, điều này bảo vệ bạn khỏi việc biết mật khẩu khi nhìn qua cơ sở dữ liệu bằng đôi mắt của bạn, nhưng nó không bảo vệ bạn khỏi bất kỳ thứ gì khác.
  • Đảm bảo rằng các tệp không thể đọc được từ bất kỳ người dùng nào khác
  • Mã hóa đĩa cứng của bạn để không ai có thể lấy mật khẩu lấy cắp ổ cứng của bạn. Máy tính của bạn sẽ yêu cầu inputung bạn mật khẩu trong quá trình khởi động.

Lưu trữ

Không có gì sai với lưu trữ dữ liệu nhiều trong hệ thống tập tin của bạn. Đối với hiệu suất tốt hơn bạn có thể làm như sau

  • Một tập tin cho mỗi người dùng, vì vậy hệ thống tập tin và không ruby ​​cần phải tìm kiếm các dữ liệu
  • Hãy rất nhiều subdirectorys. Một số hiệu suất của hệ thống filess bị ảnh hưởng nếu bạn đặt nhiều tệp vào một thư mục. ví dụ.đặt các tập tin 'abcd' thành 'a/b/c/d'

Bạn có thể sử dụng một cơ sở dữ liệu thay vì hệ thống tập tin

0

Tôi mạnh mẽ sẽ đề nghị bạn sử dụng OAuth, nhưng nếu bạn có để lưu trữ các mật khẩu (xin vui lòng được hoàn toàn chắc chắn rằng bạn cần phải làm điều đó) bạn có thể sử dụng thư viện OpenSSL để mã hóa mật khẩu. Thư viện OpenSSL khá kém tài liệu trong Ruby, nhưng theo như tôi biết chúng khá giống với thư viện C OpenSSL. Vì tôi nghĩ bạn nên sử dụng OAuth và không lưu trữ mật khẩu, tôi sẽ cho phép bạn tự tìm tài liệu.

Tuy nhiên, đối với phương pháp tiếp cận OAuth, bạn muốn xem qua số OAuth gem. Google, Twitter (mà tôi khuyên bạn nên sử dụng đá quý twitter tuyệt vời cho) và facebook (có hai lựa chọn thay thế tốt: RFacebookfacebooker)

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