- javascript/
- Javascript 在NodeJS身份验证成功后使用Nginx提供静态内容
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进行身份验证后正在寻找更好的重定向解决方案!我很久以前就在找这个该死的功能了:/