2012-07-01 29 views
5

Vì vậy, tôi đang tạo một ứng dụng cho Android cần một chương trình phụ trợ trên web. Trang web đang được xây dựng trên Ruby on Rails. Nó có một mặt khách hàng (các trang HTML đẹp) nhưng tôi cũng muốn nó có thể phục vụ thông tin cho ứng dụng Android của tôi thông qua JSON. Tuy nhiên, tôi không muốn cả thế giới có thể nhận được JSON này vì nó chứa một số thông tin nguy hiểm. Làm cách nào để khóa các trang được định dạng JSON và vẫn có thể truy cập chúng từ ứng dụng Android? Đối với hồ sơ, tôi đang sử dụng Rails 3.1 has_secure_password để xác thực người dùng tại chỗ và tôi muốn có một số tuyến đường mở cho các yêu cầu HTML nhưng bị khóa cho JSON (ví dụ: url /users phải có thể truy cập được dưới dạng HTML nhưng dưới dạng JSON, nó chỉ có thể truy cập được từ ứng dụng của tôi với một số phương thức bảo mật).Cách tạo REST Api an toàn cho ứng dụng của tôi?

Có cách nào để thực hiện việc này hay API phải là một ứng dụng riêng biệt (có thể vô cùng bất tiện với thiết lập DB, v.v.)? Về cơ bản những gì tôi muốn làm là tạo một JSON API dựa trên mã thông báo an toàn từ ứng dụng Rails của tôi và tôi không muốn sử dụng Devise hoặc thứ gì đó sẽ buộc tôi thay đổi cách tôi đã lưu trữ thông tin người dùng/thông tin.

Trả lời

2

Tùy thuộc vào phiên bản đường ray bạn đang sử dụng, một phần công việc đã được thực hiện với phương thức respond_to, cho phép bạn phân phát cả JSON và HTML cho cùng một url. Bây giờ, để khóa xuống truy cập JSON, bạn có thể xác định một phương pháp để kiểm tra truy cập ứng dụng, và gọi nó là bất cứ khi nào phục vụ tối đa các phản ứng JSON

def with_access_check() 
    if allowed # Or any verification you want. 
    yield 
    else 
    # Raise a 403 maybe? 
    end 
end 

# Then in every method that needs a check: 
respond_to :json { with_access_check { render :json => @stuff } } 

Cuối cùng, trừ khi bạn đang phục vụ dữ liệu rất khác nhau trên json và html số lượt xem (kỳ lạ nếu bạn đang sử dụng cùng một url cho cả hai) xem xét rằng không có gì có thể ngăn chặn kẻ tấn công/người dùng độc hại trích xuất dữ liệu rất giống đó từ HTML của bạn.

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