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

5
我正在为Android制作一个应用程序,需要一个Web后端。该网站正在使用Ruby on Rails构建。它有一个面向客户的页面(漂亮的HTML页面),但我也希望它能够通过JSON向我的Android应用程序提供信息。然而,我不希望整个世界都能获取这些可能包含危险信息的JSON。如何锁定JSON格式的页面,同时仍然使它们可以从Android应用程序访问?
值得一提的是,我正在使用Rails 3.1的has_secure_password进行站点用户身份验证,并且我希望有一些路由对HTML请求开放,但对JSON进行锁定(例如,/users URL应该作为HTML可访问,但作为JSON只能通过某种安全方法从我的应用程序访问)。
有没有办法做到这一点,或者API必须是一个单独的应用程序(这将非常不方便,因为涉及到数据库设置等)?
澄清: 基本上,我想要做的是从我的Rails应用程序创建一个安全的基于令牌的JSON API,并且我不想使用Devise或其他强制我更改已存储的用户名/密码信息的东西。
1个回答

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 } }

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接