2012-07-01 45 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中提取相同的数据。

相关问题