如何使用微服务架构来传达前端?

时间:2017-05-05 23:40:29

标签: rest oauth-2.0 jwt microservices laravel-passport

我正在努力设置可靠且高性能的解决方案来与不同的微服务进行前端通信。我现在不知道如何在我的前端和终端服务之间维护(可能不需要)CSRF

解决方案堆栈:PHP,Laravel Passport,JWT,oAuth 2.0,Axios

目前的做法: 实际上我已经开始接受Laravel的护照了 https://laravel.com/docs/5.4/passport#consuming-your-api-with-javascript

  1. 使用oAuth 2.0授权用户从网站A到服务B. 返回JWT令牌以进行进一步通信。
  2. 令牌保存在网站A的cookie中
  3. 一旦用户被授权,网站A使用JWT令牌管理请求,而无需额外的oAuth服务器,方法是使用HTTP标头(withCredentials)将JWT令牌作为cookie发送以授权用户。
  4. 对于每个网站A的请求,存在从服务B创建的CSRF令牌,因为用户被授权并且另一个未授权的网站可以应用cookie来访问服务B.这就是因为它必须为每个请求检索CSRF而杀死我的性能。 (我实际上从laravel护照方法中假设并且需要使用JWT令牌创建CSRF - 可能这是错误的)
  5. 我的担忧:

    关于James Ward的帖子: http://www.jamesward.com/2013/05/13/securing-single-page-apps-and-rest-services

      

    在不冒CSRF风险的情况下进行身份验证的最简单方法   漏洞就是简单地避免使用cookie来识别用户。

         

    Cookie本身不是CSRF漏洞的原因。它的   使用服务器上的cookie来验证导致原因的用户   CSRF只是将身份验证令牌放入cookie中就不行了   意味着它必须被用作识别用户的机制。

    根据我的理解设置JWT与网站A的cookie及其域集无法通过外部的任何其他网站访问。由于没有可能的方法在不访问JWT的情况下向B服务请求。

    那么我们真的需要CSRF然后在使用JWT时确保对服务B的潜在攻击吗?

    如果是这样,我怎样才能达到通过不同服务生成CSRF的最佳方式(以高效率方式),以确保通信不会受到来自不同站点的攻击?

    任何建议都将不胜感激!

0 个答案:

没有答案