编程语言
首页 > 编程语言> > 带有Authorization标头的JavaScript重定向URL

带有Authorization标头的JavaScript重定向URL

作者:互联网

我设法成功调用Apache中受基本身份验证(htpasswd等)保护的目录后面的URL. Ajax GET请求正常工作并返回受保护的内容:

var encoded = Base64.encode(username + ':' + password);
$.ajax({
    url: "/app/test",
    type: "GET",
    beforeSend: function(xhr) {
        xhr.setRequestHeader('Authorization', 'Basic ' + encoded);
    },
    success: function() {
        window.location.href = '/app/test.html';
    }
});

我最初的假设是,一旦网络会话成功授权了一个请求,它就可以在“成功”块中重定向,而无需询问用户凭据.调用此代码块时,用户已在非受保护环境中输入用户名和密码.但是,当调用重定向时,浏览器将弹出登录/密码窗口.

关于如何预先授权用户提供的基本授权会话的任何建议?

解决方法:

使用AJAX请求记录通常是有效的,因为成功的AJAX请求会设置将在所有后续请求中透明地发送的会话cookie.

也许您的cookie已设置但由于某种原因没有透明设置:您可以使用xhr.getAllResponseHeaders()/ xhr.getResponseHeader()进行检查,之后使用document.cookie进行设置.

如果没有会话cookie,则此行为通常会失败.

您可以尝试使用网址中的用户名密码重定向(不推荐使用,因为之后可能会在浏览器地址网址栏中显示用户名密码):

    window.location.href =
        window.location.protocol + "//" +
        username + ":" + password + "@" +
        window.location.hostname +
        (window.location.port ? ":" + window.location.port : "") +
        '/app/test.html';

你也应该测试延迟重定向…因为它可能正在工作,但你需要给浏览器一些额外的时间,你试过:

   var encoded = Base64.encode(username + ':' + password);
   $.ajax({
       url: "/app/test",
       type: "GET",
       beforeSend: function(xhr) {
           xhr.setRequestHeader('Authorization', 'Basic ' + encoded);
       },
       success: function() {
           setTimeout(function() {
               window.location.href = '/app/test.html';
           }, 333);
       }
   });

标签:javascript,jquery,apache,basic-authentication
来源: https://codeday.me/bug/20191007/1869597.html