ruby-on-rails - 关于身份验证的问题

标签 ruby-on-rails caching varnish

我在如何处理 token 身份验证的好主意上绘制了架构空白。

我们拥有一些电话应用程序,它们可以生成对后端API( rails )的REST请求。
现在, Varnish 位于我们的API的前面,并且运行良好,但是在处理auth的方式上存在一个空白:我们不这样做。

我并不想因为要求别人解决这个问题而被举报,我只是从更高层次上询问一些人。

手机通过POST在应用中创建其设备并获得唯一 token 。他们通过Authorization: OAuth {token}在其他所有GET请求中提交该 token 。我们的rails API处理得很好,但是由于GET是通过 Varnish 缓存的,因此我们对其进行了限制。

由于性能,我们不想缓存每个电话的每个响应。各个电话的响应都是相同的。如果我将 token 头添加到vcl_hash的哈希中,这意味着如果有50个电话要请求/a/1,那么我们将在缓存中保留50个相同的项目,而后端将获得50个请求。我们希望避免这种情况。

关于如何在某种方法的组级别上对客户端进行身份验证,我处于空白。

不确定是否有帮助:

  • Varnish 3.0.7是我们所拥有的。不反对4,只是避风港。
  • 每个客户端都会使用 Varnish ,但是我们只关心User-Agent是android/ios。该部分已经完成,其他任何事情都直接进入了API。
  • 鉴于上一点,可以安全地假设我们要哈希/缓存的所有客户端都具有相同的授权。纯粹是auth token 问题。 IE。所有带有 token 的客户端我们都将检查以确保其有效,并为他们提供缓存的资源。使用 token 的客户端之间永远不会有不同的资源。
  • 最佳答案

    如果我正确理解,我会看到一些潜在的方法。

    1)您可以设置一个仅对用户进行验证就不执行任何操作的后端-让Varnish验证尚未重启的任何内容,并且只有在验证之后才返回缓存的资源。这是一个很好的blog post,它提供了一些VCL以帮助您入门。

    2)就我而言,这更具推测性-您可以在Varnish中使用ESI (Edge Side Includes)进行身份验证。我不确定的是,是否有办法从ESI片段中终止请求或传递失败的状态代码。如果没有,即使认证失败,您最终仍将返回内容。乱。

    关于ruby-on-rails - 关于身份验证的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33831435/

    相关文章:

    C缓存模拟器初始化问题

    symfony - 父请求和 ESI 子请求之间有任何通信( Varnish 、 session 需求)吗?

    ruby-on-rails - 无法加载位于 lib 目录中的此类文件

    ruby-on-rails - 从 Elastic Beanstalk 上托管的 Rails 应用程序上传文件的问题

    database - Entrust - 此缓存存储不支持 Laravel 5.1 中的标记

    varnish - Weird Varnish 503错误-这是什么意思?

    linux - Varnish 进程未关闭并占用大量内存

    ruby-on-rails - Rails,通过 link_to 将参数发送到 Controller 操作

    ruby-on-rails - 将集合与相关对象分组

    java - 如何暂时禁用Spring缓存的缓存