2014-04-03 21 views
13

Tôi đang tạo một máy chủ API REST với Node.js và Express + MongoDB. API này sẽ có các ứng dụng khách di động khác nhau (iOS, Android) và có thể là một ứng dụng web sau này. Tôi cần người dùng đăng nhập để thực hiện một số yêu cầu API. Không có ứng dụng của bên thứ ba mà tôi muốn kết nối (không có Facebook, Google, v.v.). Tôi cũng không muốn ép buộc người dùng truy cập trang web hoặc bất kỳ thứ gì tương tự để họ đăng nhập. Từ những gì tôi đã nhìn thấy trên nhiều tìm kiếm của tôi trên SO, cách tiếp cận tốt nhất là cho phép người dùng đăng nhập bằng thông tin đăng nhập đầy đủ một lần, gửi lại mã thông báo và sử dụng mã thông báo đó để xác minh yêu cầu trong tương lai cho đến khi hết hạn.Chiến lược xác thực cho REST API và ứng dụng di động

Tuy nhiên, tôi không chắc chắn cách triển khai điều này. Tôi rất bối rối với tất cả các chiến lược khác nhau. Việc này có được thực hiện với xác thực cơ bản qua HTTPS, với OAuth, OAuth 2.0, ... không? Tôi chỉ không biết phải sử dụng cái gì. Ngoài ra, tôi thực sự không muốn phát minh lại bánh xe ở đây, không phải vì tôi lười biếng, mà chủ yếu là vì những lo ngại về bảo mật. Có một thư viện tôi có thể sử dụng để thực hiện điều này? Tôi đã nghe nói về Hộ chiếu, nhưng tôi không thể hiểu được nếu điều này là doable hay không. Điều này nghe có vẻ giống như một điều chung chung tôi chắc chắn có một giải pháp đơn giản ra khỏi đó.

Cảm ơn!

+1

Hãy thử: http://stackoverflow.com/questions/17397052/nodejs-passport-authentication-token –

+0

Tốt hơn nên yêu cầu các đề xuất về phần mềm và thư viện trên [Software Recommendations Stack Exchange] (http: //softwarerecs.stackexchange. com /). –

Trả lời

0

Tôi cảm thấy bạn cần thiết lập quy trình Xác thực dựa trên mã trong máy chủ của bạn, để bạn có thể đưa ra yêu cầu từ các loại ứng dụng khách khác nhau (Android, iOS, Web, v.v.). Thật không may, tài liệu hộ chiếu (và hướng dẫn dựa trên hộ chiếu) dường như chỉ dành cho "ứng dụng web", vì vậy tôi không nghĩ bạn nên sử dụng nó cho những mục đích đó.

tôi đã làm một cái gì đó tương tự làm theo hướng dẫn tuyệt vời này: http://code.tutsplus.com/tutorials/token-based-authentication-with-angularjs-nodejs--cms-22543

Phần client trong hướng dẫn này được dựa trên AngularJS, nhưng có thể dễ dàng áp dụng các nguyên tắc tương tự trong một khách hàng điện thoại di động (nó chỉ là một vấn đề làm cho các yêu cầu HTTP bao gồm mã thông báo được truy xuất khi bạn đăng trong "/ signin" hoặc "/ authenticate").

Chúc may mắn!

8

Bây giờ bạn có thể sử dụng Passport.js với JWT (Thẻ Web JSON) với Passport-JWT. Nó khá dễ sử dụng.

Sau khi người dùng đăng nhập, bạn gửi mã thông báo cho người dùng. Mã thông báo chứa dữ liệu về người dùng, giống như một id (được mã hóa, tất nhiên). Trên các yêu cầu tiếp theo (ít nhất là nơi yêu cầu xác thực), bạn hãy chắc chắn rằng máy khách gửi mã thông báo. Trên máy chủ, bạn có thể xem ai đã gửi yêu cầu (và ví dụ: kiểm tra ủy quyền của người dùng), chỉ bằng cách xem mã thông báo. Để biết thêm thông tin về cách JWT hoạt động check this out.

Có nhiều cách khác nhau để gửi mã thông báo. Chỉ cần có một cái nhìn tại các tài liệu và nó sẽ được rõ ràng. Nếu không, this cũng đã giúp tôi.

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