我在如何处理 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个请求。我们希望避免这种情况。
关于如何在某种方法的组级别上对客户端进行身份验证,我处于空白。
不确定是否有帮助:
最佳答案
如果我正确理解,我会看到一些潜在的方法。
1)您可以设置一个仅对用户进行验证就不执行任何操作的后端-让Varnish验证尚未重启的任何内容,并且只有在验证之后才返回缓存的资源。这是一个很好的blog post,它提供了一些VCL以帮助您入门。
2)就我而言,这更具推测性-您可以在Varnish中使用ESI (Edge Side Includes)进行身份验证。我不确定的是,是否有办法从ESI片段中终止请求或传递失败的状态代码。如果没有,即使认证失败,您最终仍将返回内容。乱。
关于ruby-on-rails - 关于身份验证的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33831435/