Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了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;
    }
  }

/etc/Nginx/.htpasswd文件只是user:encryptedpassword,很好.

使用此配置,当我转到我的IP时:

>问我用户和密码
>开始加载页面
>(有时)再次询问用户和密码
>完成加载页面

到目前为止这么好,即使它问了两次密码.

Node.js应用程序有一个JWT身份验证,当我登录时,网站重新加载,从这里,它无限期地询问用户和密码(基本身份验证),只要我点击登录. JWT在我的本地存储中.如果我在基本身份验证提示上单击取消,则JWT将被删除,我已注销,并且…再次询问基本身份验证.

这是在Chrome上.使用Firefox和Safari,在JWT日志记录之后,它会自动从本地存储中删除令牌(并且我已经注销).

这很难解释,我不能告诉你网站.简而言之,主要问题是删除了(node.js应用程序的)JWT.

@H_301_35@解决方法
当我意识到问题是Basic Auth和JWT之间的冲突(正如@CurIoUs在推荐中所建议的那样),以及他们都使用Authorization标头时,解决方案非常简单.

我将我的前端应用程序配置为通过自定义标头** JWTAuthorization **发送JWToken,因此当请求到达服务器时,它包含两个标头Authorization& JWTAuthorization.然后它非常简单,在传递基本身份验证之后,我只需替换头文件(这里是基于Koa的Node.js应用程序):

app.use(function *(next) {
  this.headers.authorization = this.headers.jwtauthorization;
  yield next;
});

大佬总结

以上是大佬教程为你收集整理的node.js – 基本身份验证和JWT全部内容,希望文章能够帮你解决node.js – 基本身份验证和JWT所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: