我已经实现了一个使用基本身份验证的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
为什么浏览器不发送身份验证标头。
答案 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/之类的插件或一个邮递员之类的额外工具。