Coh*_*ars 5 authentication nginx basic-authentication node.js jwt
我目前正在运行一个Node.js应用程序,其中包含API和文件服务(我知道nginx可以处理它,但我最初不应该使用它).
我只是用它来制作一个简单的基本身份验证,这恰好不是那么简单.
这是我的nginx配置:
upstream nodejsapp {
server 127.0.0.1:1337;
keepalive 15;
}
server {
listen 80 default_server;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_redirect off;
location / {
proxy_pass http://nodejsapp;
proxy_set_header Connection "Keep-Alive";
proxy_set_header Proxy-Connection "Keep-Alive";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
}
}
Run Code Online (Sandbox Code Playgroud)
该/etc/nginx/.htpasswd文件是公正的user:encryptedpassword,也很好.
使用此配置,当我转到我的IP时:
到目前为止这么好,即使它问了两次密码.
Node.js应用程序有一个JWT身份验证,当我登录时,网站重新加载,从这里,它无限期地询问用户和密码(基本身份验证),只要我点击登录.JWT在我的本地存储中.如果我在基本身份验证提示上单击取消,则JWT将被删除,我已注销,并且...再次询问基本身份验证.
这是在Chrome上.使用Firefox和Safari,在JWT日志记录之后,它会自动从本地存储中删除令牌(并且我已经注销).
这很难解释,我不能告诉你网站.简而言之,主要问题是删除了(node.js应用程序的)JWT.
当我意识到问题是Basic Auth和JWT之间的冲突(正如@Curious在推荐中所建议的那样),并且他们都使用了Authorization标题时,解决方案非常简单.
我将前端应用程序配置为通过自定义标头发送JWToken **JWTAuthorization**,因此当请求到达服务器时,它包含两个标头Authorization和JWTAuthorization.然后它非常简单,在传递基本身份验证之后,我只需替换头文件(这里是基于Koa的Node.js应用程序):
app.use(function *(next) {
this.headers.authorization = this.headers.jwtauthorization;
yield next;
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1195 次 |
| 最近记录: |