2013-03-09 31 views
6

Tôi đang viết một API REST riêng với Play! rằng tôi sẽ gọi điện từ một ứng dụng di động và tôi bối rối về cách giữ an toàn cho nó.Bảo mật với Play! từ Ứng dụng bên ngoài

Khi làm việc thông qua ví dụ khác về Công cụ tạo Blog khác trong tài liệu của Play !, tôi đã làm việc qua số authentication example và thỏa thuận đăng nhập thông qua trình duyệt. Từ những gì tôi hiểu về mô-đun an toàn của Play !, nó giúp với các phiên trình duyệt. Ngoài ra, mỗi câu hỏi StackOverflow tôi đã thấy đã được tham gia với một mô-đun quản trị trên web và các câu hỏi đã được liên quan đến các phiên là tốt.

Does the Play! framework have any built in mechanism to prevent session hijacking?

Enforce Https routing for login with play framework

hiểu biết hiện tại của tôi như thế nào an ninh nên làm việc:

  • Ứng dụng di động "nhật ký trong" để các ứng dụng web và có được một số loại thẻ
  • Với mỗi lệnh gọi tiếp theo, mã thông báo được nối vào cuối cuộc gọi API
  • Nếu sử dụng thiết bị di động r "đăng xuất" hoặc token hết hạn, các ứng dụng web loại bỏ các dấu hiệu
  • Mỗi cuộc gọi API sử dụng HTTPS để duy trì an ninh

Có thể cho tôi để thực hiện một yêu cầu HTTP từ các ứng dụng di động để ứng dụng web tôi tạo bằng Play! Khung trong khi vẫn giữ an toàn?

Tôi có đang tiếp cận toàn bộ tình huống không chính xác không?

Đây là lần phát đầu tiên! ứng dụng tôi đã tạo và đây là lần đầu tiên tôi sử dụng Heroku. Tôi không quá xa ở chỗ tôi sẽ phản đối việc chuyển sang một thứ khác nếu nó dễ dàng hơn/hiệu quả hơn/phù hợp hơn để giải quyết vấn đề này.

EDIT: Ngoài ra, trong hướng dẫn YABE của Play, có vẻ như họ kiểm tra mật khẩu ở dạng văn bản thuần túy. Chỉ cần từ một quan điểm chung, làm thế nào mà không phải là một vấn đề an ninh?

CHỈNH SỬA 2: Tôi đã xem xét thông tin nhà cung cấp OAuth và dường như giải quyết vấn đề. Sự lo lắng duy nhất của tôi với nó là v2.0 đã biết lỗi bảo mật và v1.0 có vẻ phức tạp để thực hiện cho một tình huống mà tất cả những gì tôi cần là kết nối an toàn giữa ứng dụng di động và ứng dụng web. Nếu tôi đã thực hiện mọi cuộc gọi yêu cầu SSL, tôi có thể làm cho mỗi phương thức Play chỉ nhận tên người dùng và mật khẩu làm thông số và bỏ qua OAuth hoàn toàn không?

+2

"trong Play 's Yabe hướng dẫn, nó có vẻ như họ kiểm tra mật khẩu trong văn bản đơn giản "- phụ thuộc vào ý bạn bằng văn bản thuần túy. Nếu nó qua HTTPS, không có vấn đề gì khi gửi mật khẩu trong một yêu cầu. Nếu họ đang lưu trữ mật khẩu trong cơ sở dữ liệu trong văn bản thuần túy, điều đó thật tệ. Xấu hổ khi hướng dẫn hoàn toàn bỏ qua bảo mật cơ bản "để đơn giản". – Nick

+0

Từ các liên kết bạn đã sử dụng, có vẻ như bạn đang sử dụng Play 1.x. Bất kỳ lý do bạn không đi với 2.x? – Nick

+0

Heroku theo mặc định sử dụng Play 1.2.4. Tôi không biết lý do gì để nâng cấp nó ngay bây giờ và thời gian là điều quan trọng nhất liên quan đến ứng dụng dành cho thiết bị di động. – eliot

Trả lời

2

Ví dụ về việc bạn có ứng dụng dành cho thiết bị di động cho phép ứng dụng web đạt được với khung ủy quyền như OAuth. Điều này cho phép ứng dụng web cho phép người dùng đăng nhập, sau đó cấp mã thông báo truy cập cho ứng dụng dành cho thiết bị di động để tạo yêu cầu với người dùng đó mà không cần ứng dụng di động phải xử lý mật khẩu của người dùng.

Hãy xem mô-đun OAuth nhà cung cấp cho Play. Nếu bạn là Google, bạn có thể tìm thấy mô-đun OAuth ứng dụng khách cho Play, nhưng đó là cho phía bên kia của OAuth, cho phép ứng dụng web của bạn ủy quyền chống lại nhà cung cấp bên thứ 3. Sau đó, bạn sẽ sử dụng thư viện ứng dụng khách OAuth trong ứng dụng dành cho thiết bị di động của mình để xử lý mã thông báo truy cập.

Nó thậm chí có thể là một thư viện Java chung cho OAuth - Play 2.0 documentation for OAuth tuyên bố rằng nó chưa cung cấp mô-đun OAuth 2.0 vì nó đủ đơn giản thậm chí không cần thư viện. Tuy nhiên có a few Java libraries available.

Dưới đây là một dự án mà ai đó đặt lại với nhau một số công cụ cung cấp OAuth với Play (tham chiếu từ this forum post):

https://github.com/mashup-fm/playframework-oauthprovider

+0

Tôi đã xem xét ban đầu OAuth nhưng tôi nghĩ rằng tôi đã chán nản vì tôi chỉ tìm kiếm thông tin mô-đun của khách hàng. Và trong câu cuối cùng của bạn, bạn có nghĩa là để nói ứng dụng di động, phải không? Vì vậy, tôi sẽ có nhà cung cấp OAuth trong ứng dụng web (Play!) Và ứng dụng OAuth trong ứng dụng dành cho thiết bị di động? – eliot

+0

Có, xin lỗi, đã sửa. Ngoài ra, hãy xem phần bổ sung của tôi - nó không nhất thiết phải là một mô-đun Play, vì đó là một luồng công việc khá đơn giản mà bạn có thể tự cuộn. – Nick

+0

OK, tôi đã xem xét thông tin nhà cung cấp OAuth và có vẻ như để giải quyết vấn đề. Sự lo lắng duy nhất của tôi với nó là v2.0 đã biết lỗi bảo mật và v1.0 có vẻ phức tạp để thực hiện cho một tình huống mà tất cả những gì tôi cần là kết nối an toàn giữa ứng dụng di động và ứng dụng web. Nếu tôi đã thực hiện mọi cuộc gọi yêu cầu SSL, tôi có thể làm cho mỗi phương thức Play chỉ nhận tên người dùng và mật khẩu làm thông số và bỏ qua OAuth hoàn toàn không? – eliot

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