如何为我的应用程序创建安全的Rails REST Api?

Sam*_*ern 5 authentication rest android ruby-on-rails

所以我正在制作一款需要网络后端的Android应用.该网站正在使用Ruby on Rails构建.它有面向客户端(漂亮的HTML页面)但我也希望它能够通过JSON向我的Android应用程序提供信息.但是,我不希望整个世界能够获得这个JSON,因为它包含一些可能危险的信息.如何锁定JSON格式的页面并仍然可以从Android应用程序访问它们?

为了记录,我使用Rails 3.1 has_secure_password进行现场用户身份验证,我希望有一些为HTML请求打开但是为JSON锁定的路由(例如,/usersurl应该可以作为HTML访问,但作为JSON它可以访问应该只能通过我的应用程序访问一些安全方法).

有没有办法做到这一点,或者API必须是一个单独的应用程序(这将是非常不方便的数据库设置等)?

澄清:基本上我想要做的是从我的Rails应用程序创建一个基于令牌的安全JSON API,我不想使用Devise或某些东西会迫使我改变我已经存储我的用户/传递信息的方式.

Chr*_*cca 2

根据您使用的 Rails 版本,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 } }
Run Code Online (Sandbox Code Playgroud)

最后,除非您在 json 和 html 视图上提供非常不同的数据(如果您对两者使用相同的 url,这很奇怪),否则没有什么可以阻止攻击者/恶意用户从您的 HTML 中提取完全相同的数据。