首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用RESTful协议与Oauth2协议进行清漆?

如何使用RESTful协议与Oauth2协议进行清漆?
EN

Stack Overflow用户
提问于 2013-12-30 15:05:17
回答 1查看 2K关注 0票数 5

我使用RESTful、FosRestBundle和FosUserBundle用Symfony2编写了一个Api。我计划在我的api前面带来清漆作为反向代理。由于我的应用程序使用我的api总是发送access_token作为参数或头清漆缓存几乎每一个请求作为不同的请求,它是无效的。因为我在控制器中使用access_token的用户是为了安全,有时也是为了内容,所以我不能在vcl_recv中从请求中完全删除access_token。在互联网上搜索了几次之后,我发现了一个认证http://www.adayinthelifeof.nl/2012/07/06/using-varnish-to-offload-and-cache-your-oauth-requests/的解决方案。但是,我不知道如何告诉头中的FosUserBundle当前用户在security.yml中传递安全性:

代码语言:javascript
复制
  access_control:
   - { path: ^/2013-08-30/foo$, role: ROLE_USER, requires_channel: https, methods: [GET] }

简而言之,我如何告诉FosUserBundle当前用户的请求(从清漆发送)头?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-27 20:30:20

有几种方法可以解决这样的问题,如果您希望两个稍微不同的请求返回相同的响应(即请求仅通过API键get param不同),那么最快和最简单的解决方案就是使用hash_data函数在vcl_hash中自定义清漆的唯一性定义。您只需去掉所有不有助于使响应变得清晰的url元素,并对其进行散列。例如,如果url包含"access_token",则从散列键中删除所有GET params:

代码语言:javascript
复制
sub vcl_hash {
  if (req.url ~ "access_token"){
    set req.url = regsub(req.url, "^https?://(.*)\?access_token=.*$","\1");
  }
  hash_data(req.url);
}

换句话说,这将缓存mydomain.com/some/restful/request?access_token=abc和mydomain.com/some/restful/request?access_token=def作为匹配。

如果响应与应该是唯一的小区域(即大型JSON响应中的一个值,或标题中写着“欢迎用户名!”的div )相同,则可以使用边边包括。当然,这需要定制后端返回的内容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20842104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档