2008-12-09 10 views
8

Tôi đang xây dựng một ứng dụng iPhone nói chuyện với chương trình phụ trợ của Ruby on Rails. Ứng dụng Ruby on Rails cũng sẽ phục vụ người dùng web. Plugin restful_authentication là một cách tuyệt vời để cung cấp xác thực người dùng nhanh chóng và tùy chỉnh. Tuy nhiên, tôi muốn người dùng ứng dụng iPhone tự động tạo tài khoản bằng mã định danh duy nhất của điện thoại ([[Thiết bị UIDevice] uniqueIdentifier]) được lưu trữ trong một cột mới. Sau đó, khi người dùng đã sẵn sàng để tạo tên người dùng/mật khẩu, tài khoản sẽ được cập nhật để chứa tên người dùng và mật khẩu, để nguyên định danh duy nhất của iPhone. Người dùng sẽ không thể truy cập trang web cho đến khi họ thiết lập tên người dùng/mật khẩu của họ. Tuy nhiên, họ có thể sử dụng ứng dụng iPhone, vì ứng dụng có thể tự xác thực bằng cách sử dụng mã nhận diện của nó.Cách tốt nhất để mở rộng restful_authentication/AuthLogic để hỗ trợ đăng nhập lười biếng bằng iPhone ẩn danh là gì?

Cách tốt nhất để sửa đổi restful_authentication để làm điều này là gì? Tạo plugin? Hoặc sửa đổi mã được tạo ra?

Còn các khung thay thế, chẳng hạn như AuthLogic. Cách tốt nhất để cho phép iPhone có được mã thông báo xác thực được tạo ra bị khóa với UUID của họ là gì, nhưng sau đó cho phép người dùng tạo tên người dùng/mật khẩu sau?

+0

Không thực sự là một câu trả lời, nhưng một cái gì đó nhiều hơn để suy nghĩ về: làm thế nào thiết kế của bạn để xử lý trường hợp ai đó có tài khoản iphone, đăng ký một tài khoản người dùng/mật khẩu trên trang web một cách độc lập, và sau đó muốn kết hợp hai tài khoản? – Stobor

+0

Tôi đã thực hiện một số suy nghĩ thêm về vấn đề này, và trong khi tôi vẫn chưa đưa ra một giải pháp thỏa mãn tôi, tôi đã thử một vài điều. Tạo tài khoản ẩn danh với tên người dùng/mật khẩu ngẫu nhiên được liên kết với một đối tượng Thiết bị hoạt động đôi chút. Tuy nhiên, điều này yêu cầu thiết bị phải có tên người dùng/mật khẩu khi tạo và lưu trữ nó. Vấn đề với giải pháp này là trang web được phân phối bằng các đóng góp tài khoản ẩn danh (dễ dàng khắc phục được bằng cách có trường loại tài khoản trong Người dùng được gọi là Ẩn danh, sau đó bạn có thể lọc ra nếu cần). Giải pháp này hoạt động nhưng không phải là tuyệt vời. –

Trả lời

6

Tôi nghĩ bạn không nên sử dụng số nhận dạng điện thoại một mình để xác thực vì nó không phải là bí mật và có lẽ cũng có thể đoán được/dự đoán được. Đừng quên rằng nếu ai đó muốn hack ứng dụng web của bạn, họ không phải sử dụng mã của bạn - họ chỉ có thể đoán ID thiết bị và cố gắng gây rối với dữ liệu người dùng của bạn bằng bất kỳ ứng dụng web nào.

Bạn nên coi ID thiết bị tương tự như tên người dùng - ID này là để nhận dạng và không xác thực. Tôi khuyên bạn nên yêu cầu người dùng chọn mật khẩu hoặc tự động tạo mã ngẫu nhiên tốt hơn, đi cùng với nó - sau đó gửi ID thiết bị + mật khẩu/mã này để đăng ký thiết bị trước tiên và sau đó xác thực thiết bị.

Bạn cũng có thể đặt cược rằng một số người dùng sẽ có nhiều thiết bị - hoặc họ sẽ thay thế một thiết bị, hoặc bạn sẽ nhận được một người như Stephen Fry đi xung quanh với 4 chiếc điện thoại. Để giải quyết vấn đề này, tôi khuyên bạn nên tìm cách khởi tạo restful_authentication hai lần, một lần để xác thực người dùng và lần thứ hai để xác thực thiết bị. Tôi đã không sử dụng plugin này nhưng tôi hy vọng bạn chỉ cần sử dụng các tham số bảng khác nhau để thực hiện điều này. Sau đó, trong logic ứng dụng của bạn cho phép người dùng liên kết nhiều thiết bị với tài khoản của họ.

Để thực hiện điều đó một cách an toàn, hãy thực hiện điều đó từ thiết bị hoặc để thiết bị hiển thị mã ngẫu nhiên mà sau đó chúng nhập vào ứng dụng web để chứng minh chúng sở hữu thiết bị (điều này nghe có vẻ đau đớn hơn) quá trình mà Apple sử dụng trong itunes, Apple TV và ứng dụng từ xa - hãy xem cách họ làm điều đó - vì vậy nó sẽ không gây ngạc nhiên cho người dùng).

(Cũng đảm bảo rằng khi tạo bất kỳ mật khẩu ngẫu nhiên nào bạn sử dụng trình tạo số ngẫu nhiên mã hóa làm cơ sở - có thể có một API iPhone cho điều này - nếu không mật khẩu của bạn có thể dự đoán được).

+0

Cảm ơn Franks. Đó là tất cả lời khuyên tuyệt vời về một chương trình bảo mật cho phép thiết bị. Nó không hoàn toàn trả lời câu hỏi của tôi về một kỹ thuật để sửa đổi restful_authentication. Tôi nghĩ rằng bạn mang lại một số điểm tuyệt vời mặc dù! –

+0

cũng thực sự tôi đề nghị bạn không sửa đổi restful_authentication - suy nghĩ lại sơ đồ của bạn để bạn có thể sử dụng hai phiên bản khác nhau - một để xác thực thiết bị và một để xác định người dùng. Cộng với logic ứng dụng để cho phép liên kết các thiết bị N với người dùng. – frankodwyer

+0

Bạn có bất cứ đề xuất nào về cách thực hiện điều đó không? –

0

Bạn đã cố gắng sử dụng một lược đồ xác thực khác như Authlogic? Tôi đã tìm thấy restful_authentication thay vì xâm nhập (mặc dù tôi bị lừa bằng cách sử dụng bort).

+0

Có, restful_authentication có vẻ khá xâm nhập. Tôi sẽ xem xét Authlogic, mặc dù, tôi đã đưa ra một thay thế tạm thời bằng cách sửa đổi restful_authentication trực tiếp (nhưng điều này không nâng cấp bằng chứng trong tương lai của nó). –

0

Tạo mật khẩu ngẫu nhiên trong Rails link text Tôi đang sử dụng Restful_authentication plugin cho một trong những dự án của tôi. Là một phần của quy trình tạo người dùng của tôi, hệ thống phải tạo mật khẩu ngẫu nhiên cho người dùng mới.

0

Bạn nghĩ gì về việc sử dụng UDID và mật khẩu ngẫu nhiên được tạo bằng cách sử dụng UDID + một muối được xác định trên toàn trang web?

Cái gì như:

salt = 'afG553Dvbf3' 

udid = '1234567890' 
pass = Digest::MD5.hexdigest(udid + salt) 

Và gửi rằng mật khẩu cho iPhone để lần sau nó kết nối.