如何使用浏览器发送授权标头

时间:2019-02-09 14:01:31

标签: browser webserver basic-authentication www-authenticate

我已经实现了一个使用基本身份验证的Web服务器(使用Spring Security)。

我在访问URL时禁用了默认的身份验证入口点(不是使用www-authentication标头响应401,而是返回401),目的是防止浏览器显示身份验证弹出窗口。

我能够使用javascript代码和curl等命令行工具连接到服务器,但是当我使用浏览器(chrome和firefox)对其进行测试时,它们只是不发送标头。

curl -v -u user:password localhost:8080/user

  

获取/用户HTTP / 1.1
  主机:localhost:8080
  授权:基本dXNlcjpwYXNzd29yZA ==
  用户代理:curl / 7.58.0
  接受: /

Chrome:版本71.0.3578.98(正式版)(64位)
http://user:password@localhost:8080/user

  

获取/用户HTTP / 1.1
  主机:localhost:8080
  连接:保持活动状态
  不安全升级请求:1
  用户代理:Mozilla / 5.0(Windows NT 10.0; Win64; x64)AppleWebKit / 537.36(KHTML,如Gecko)Chrome / 71.0.3578.98 Safari / 537.36
  DNT:1
  接受:
  text / html,application / xhtml + xml,application / xml; q = 0.9,image / webp,image / apng, / ; q = 0.8
  接受编码:gzip,deflate,br   接受语言:en-AU,en; q = 0.9,fr-FR; q = 0.8,fr; q = 0.7,en-GB; q = 0.6,en-US; q = 0.5

为什么浏览器不发送身份验证标头。

2 个答案:

答案 0 :(得分:1)

实际上可以。 借助客户端JavaScript,您可以发送。使用AJAX请求。在xhr请求参数中传递身份验证令牌。

<script type='text/javascript'>
// define vars
var url = 'https://...';

// ajax call
$.ajax({
    url: url,
    dataType : 'jsonp',
    beforeSend : function(xhr) {
      // set header if JWT is set
      if ($window.sessionStorage.token) {
          xhr.setRequestHeader("Authorization", "Bearer " +  $window.sessionStorage.token);
      }

    },
    error : function() {
      // error handler
    },
    success: function(data) {
        // success handler //can redirect to any route of your wish
    }
});
</script>

P.S。 -我从{em> Where to save a JWT in a browser-based application and how to use it

得到了提示

答案 1 :(得分:0)

通常,浏览器在登录后会获得Auth令牌。后端将有效令牌作为授权部分添加到标头。 要使用浏览器处理HTML请求,您需要一个https://addons.mozilla.org/de/firefox/addon/restclient/之类的插件或一个邮递员之类的额外工具。