当前位置: 首页 > 知识库问答 >
问题:

基本认证和JWT

戴嘉珍
2023-03-14

我目前正在运行一个Node.js应用程序,有一个应用程序接口和文件服务(我知道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:加密密码,很好。

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

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

到目前为止还不错,即使它问了两次密码。

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

这是在浏览器上。使用火狐浏览器和 Safari 浏览器,在 JWT 日志记录后,它会自动从本地存储中删除令牌(并且我已注销)。

这很难解释,我也不能给你看网站。简而言之,主要问题是(node.js应用的)JWT被删除了。

共有1个答案

鲜于意
2023-03-14

当我意识到问题出在基本授权和JWT之间的冲突(正如@好奇在建议中指出的),并且它们都使用< code>Authorization头时,解决方案就很简单了。

我将前端应用程序配置为通过自定义标头 **JWT 授权**发送 JWToken,因此当请求到达服务器时,它包含两个标头授权

app.use(function *(next) {
  this.headers.authorization = this.headers.jwtauthorization;
  yield next;
});
 类似资料:
  • 基本认证在 Web 应用中是非常流行的认证机制。 基本身份验证通常用于无状态客户端,它们在每个请求中传递其凭证。 将其与基于表单的认证结合使用是很常见的,其中通过基于浏览器的用户界面和作为Web服务来使用应用。 但是,基本认证将密码作为纯文本传输,是不安全的,所以它只能在真正通过加密的传输层(如HTTPS)中使用。 在 jpa-userdetailsservice项目的基础上,我们构建了一个bas

  • 我开发了一个spring启动应用程序。当我需要执行REST请求时(POST、PUT…)我每次都使用这样的基本身份验证 有没有另一种方法可以在应用程序中进行一次基本身份验证,然后在没有基本身份验证的情况下使用RestTem板或http Post{放/删除...}? 顺致敬意,

  • 问题内容: 我正在尝试使用Spring Security做一个非常简单的基本身份验证。我已经正确配置了名称空间,并且服务器中没有异常。在我的“ servlet.xml”中,我获得了Spring Security的下一个: 几乎一切都完美了:没有的方法不会提示任何登录表单,而方法会提示它。问题是,或者,都不能登录那里。谁能看到我在做什么错? 提前致谢!;-) 问题答案: 自动应答 T_T为此,我花了

  • 我正在为一个新项目使用OkHttp库,它的易用性给我留下了深刻的印象。我现在需要使用基本身份验证。不幸的是,缺少可用的示例代码。我正在寻找一个示例,说明在遇到HTTP 401头时如何将用户名/密码凭据传递给OkAuthenticator。我看到了这个答案: 改装带有基本HTTP身份验证的POST请求:“无法重试流式HTTP正文” 但这并没有让我走得太远。OkHttp github repo上的示例

  • 问题内容: 下面的答案来自这个问题。 授予的答案实际上并没有解决所有问题。它仅在数据传输的上下文中提及SSL,实际上并未涵盖身份验证。 您真的在问有关安全认证REST API客户端的问题。除非您使用TLS客户端身份验证,否则单独使用SSL并不是REST API可行的身份验证机制。没有客户端身份验证的SSL仅对服务器进行身份验证,这与大多数REST API无关。 如果您不使用TLS客户端身份验证,则

  • BasicAuth (基本认证) 中间件 BasicAuth 中间件提供了 HTTP 的基本认证方式。 对于有效的请求则继续执行后面的处理。 对于无效的请求,返回”401 - Unauthorized”响应。 用法 e.Use(middleware.BasicAuth(func(username, password string, c echo.Context) (bool, error) {