2012-07-01 99 views
5

因此,我正在爲Android需要一個Web後端的應用程序。該網站正在Ruby on Rails中構建。它有一個客戶端(漂亮的HTML頁面),但我也希望它能夠通過JSON向我的Android應用程序提供信息。但是,我不希望整個世界都能夠獲得這個JSON,因爲它包含了一些可能的危險信息。如何鎖定JSON格式的頁面,並仍然可以從Android應用訪問它們?如何爲我的應用程序創建安全的Rails REST Api?

爲了記錄在案,我使用了現場用戶身份驗證的Rails 3.1 has_secure_password,我想有一些路線是開放的HTML請求,但鎖定JSON(例如,URL /users應該可以訪問作爲HTML,但作爲JSON,它應該只能從我的應用程序與一些安全方法訪問)。

有沒有辦法做到這一點,或API必須是一個單獨的應用程序(這將是非常不便的數據庫設置等)?

CLARIFICATION: 基本上我想要做的是從我的Rails應用程序創建一個安全的基於令牌的JSON API,並且我不想使用Devise或其他方法來迫使我改變我已經存儲我的方式用戶/傳遞信息。

回答

2

根據您使用的導軌版本,部分工作已經通過respond_to方法完成,該方法允許您爲同一個url同時提供JSON和HTML。 現在,鎖定JSON的訪問,您可以定義檢查應用程序訪問的方法,並調用它,每當服務的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 } } 

最後,除非你對JSON和HTML服務非常不同的數據視圖(如果您對兩者使用相同的url,這很奇怪)認爲沒有任何東西可以阻止攻擊者/惡意用戶從HTML中提取相同的數據。

相關問題