我们有一个JSON哈希,后端处理并提供给我们的前端来计算地图。 JSON哈希是从GET请求呈现的,并且不断更新(不缓存)。
我们需要一种方法来锁定路由,以便只有应用程序本身可以连接到它(阻止机器人ping ping URL以获取哈希值)。前端和后端在一个Rails应用程序中绑定在一起(没有单独的服务)。
我的问题是ActionController :: RequestForgeryProtection :: ClassMethods不支持GET和ActionController :: HttpAuthentication :: Token是过度的,因为我需要将JSON哈希限制到应用程序(而不是特定用户)。 Request.referrer可以被欺骗,所以我在检查时犹豫不决。
如果不是应用程序发出请求,我会很感激如何拒绝向控制器发出外部GET请求。
Rails:4.2.6
答案 0 :(得分:2)
您将无法阻止任意程序(即:“用户代理”)对您的服务器发出HTTP请求。但是,您可以拒绝回复有用的内容,除非用户代理可以证明它是您的应用程序。
您要做的是在客户端应用中对您的请求进行加密签名,然后在响应之前验证服务器上的签名。我不知道有任何Ruby / Rails库可以做到这一点(我在粗略搜索时找不到任何东西),但它可以从现有的库中构建。这是一个快速而肮脏的实现概念:
免责声明:
我还建议您阅读OAuth的工作原理。它解决了类似的问题,您可以根据自己的需要进行调整。