我正在就如何处理令牌身份验证的好主意画一个架构空白。
我们有手机应用程序为我们的后端API(rails)生成REST请求。 现在清漆在我们的API前面并且它工作得很好,但是我们处理auth的方式存在一个漏洞:我们不。
我不想因为要求有人解决它而被标记,我只是从高层询问一些人有什么。
手机通过POST在应用中创建设备并获取唯一令牌。他们通过Authorization: OAuth {token}
在其他所有GET请求中提交该令牌。我们的rails API处理得很好,但由于GET是通过清漆缓存的,我们已经对它进行了管理。
由于性能原因,我们不希望每个手机每个响应缓存。电话的响应都是一样的。如果我要将标记头添加到vcl_hash
中的哈希,这意味着如果有50个手机要求/a/1
,那么我们在缓存中有50个相同的项目,后端会得到50个请求。我们想避免这种情况。
我对如何在某种方法的组级别上验证客户端感到茫然。
不确定是否有用:
答案 0 :(得分:1)
如果我理解正确,我会看到一些潜在的方法。
1)您可以设置一个除了验证用户之外什么都不做的后端 - 让Varnish验证任何尚未重启的内容,并且只有在验证后才返回缓存的资源。这是一个很好的blog post,可以让一些VCL让你入门。
2)这对我来说更具推测性 - 您可以在Varnish中使用ESI (Edge Side Includes)来进行身份验证。我不确定的是,是否有办法终止请求或从ESI片段中传递失败的状态代码。如果没有,即使auth失败,您也最终会返回内容。乱。