Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在NodeJS身份验证成功后使用Nginx提供静态内容_Javascript_Node.js_Express_Nginx_Jwt - Fatal编程技术网

Javascript 在NodeJS身份验证成功后使用Nginx提供静态内容

Javascript 在NodeJS身份验证成功后使用Nginx提供静态内容,javascript,node.js,express,nginx,jwt,Javascript,Node.js,Express,Nginx,Jwt,上下文: 我正在尝试构建一个webapp,使用Nginx作为前端服务器,同时作为后端NodeJS服务器的代理。我想通过适当的身份验证机制限制对webapp功能部分的访问。身份验证逻辑由NodeJS服务器处理,并使用JWTs处理相同的逻辑 当前流量: 静态登录页面显示给正在由Nginx提供服务的用户 用户凭证被发送到Nginx服务器,该服务器被转发到NodeJS服务器,NodeJS服务器处理登录逻辑,并且在成功身份验证时发回JWT令牌。(所有www.baseurl.com/api请求都被转发到No

上下文:

我正在尝试构建一个webapp,使用Nginx作为前端服务器,同时作为后端NodeJS服务器的代理。我想通过适当的身份验证机制限制对webapp功能部分的访问。身份验证逻辑由NodeJS服务器处理,并使用JWTs处理相同的逻辑

当前流量:

  • 静态登录页面显示给正在由Nginx提供服务的用户
  • 用户凭证被发送到Nginx服务器,该服务器被转发到NodeJS服务器,NodeJS服务器处理登录逻辑,并且在成功身份验证时发回JWT令牌。(所有www.baseurl.com/api请求都被转发到NodeJS服务器)
  • JWT存储在客户端浏览器的localStorage中(由Auth0团队推荐),然后我想将用户重定向到功能强大的webapp页面(比如/home)
  • 对于重定向,我请求使用JWT令牌访问Nginx服务器的/api/主页。该请求被转发到NodeJS以验证令牌。一旦验证,我需要提供webapp功能主页,它是.html、.css、.js文件的混合体
  • 由于页面本身首先呈现为静态,然后它发出ajax请求以加载更多内容,因此我希望从我的Nginx服务器提供此主页,而不是从Node JS服务器发送整个HTML字符串。一旦静态页面加载到客户机上,我想开始向节点服务器发出请求,根据用户的权限请求进一步的页面内容 问题陈述:

    如何使用Node和Nginx实现相同的功能?Nginx如何知道NodeJS在步骤4中验证了用户令牌,然后服务于主页的静态部分

    这可能吗?处理此类身份验证流情况的最佳推荐方法是什么


    PS:我在服务器端使用ExpressJS框架,在客户端使用纯html/css/js(没有客户端web框架)

    我想你有两种解决这个问题的方法

    1.在NGINX级别验证令牌 您正在使用Auth0,对吗?他们制作了一个库,用Nginx和Lua验证JWT令牌。所以跟着我走,你应该表现得很好

    2.不要验证令牌 我相信单页应用程序的敏感部分在于其数据和后端算法。前面的HTML、CSS和JS文件(在大多数情况下)不需要保护!而且很可能不可能保证他们的安全。你只需创建一个帐户,获取所有受保护的文件,并在公共网站上公开它们。保持简单。如果保护这些文件没有用,就不要这样做


    我希望这将对您有所帮助:)

    我找到了解决方案,包括以下步骤:

  • 使用Nginx提供静态登录页面
  • 将登录凭据转发到NodeJS服务器,在该服务器上处理身份验证,并将身份验证令牌存储在响应cookie中(仅限http)。将此响应连同cookie集一起发送到客户端
  • 客户端收到身份验证消息后,在成功请求时,将打开安全webapp页面。此请求将携带身份验证cookie。
  • 再次从Nginx将请求转发到NodeJS服务器,验证令牌,设置X-Accel-Redirect头以及在NodeJS服务器上查找安全文件的路径
  • 在使用X-Accel-Redirect时,需要特别注意Mime类型的响应

    • CSS需要与文本/CSS一起使用
    • 图像需要与图像/jpeg一起提供
    • HTML内容应与text/HTML一起提供

    感谢这两个建议,尽管我在使用Node JS进行身份验证后正在寻找更好的重定向解决方案!我很久以前就在找这个该死的功能了:/