我有一个Java应用程序JSF,它使用javascript连接到需要基本身份验证的网站。
我想同谋的事情与我在弹出窗口中输入用户名和密码时发生的事情完全相同。
我已经尝试了许多不同的方法,但我看到的关于这个主题的方法,但没有一个有效。奇怪的是,ajax 调用返回一个响应,但无论如何我都会收到 Windows 安全弹出窗口。我需要以某种方式缓存它吗?例如,下面的两个代码我都无法工作。下面的一个使用base64
$.ajax(
{
'password' : password,
'username' : username,
'url' : url,
'type' : 'GET',
'success' : function(){ alert("success"); },
'error' : function(err){ alert('Bad Login Details' + err);},
}
);
$.ajax({
url : url,
method : 'GET',
beforeSend : function(req) {
req.setRequestHeader('Authorization', auth);
},
error : function(xhr, ajaxOptions, thrownError) {
alert('Invalid username or password. Please try again. thrownError:' + thrownError + 'xhr:' + xhr + 'ajaxOptions:'+ajaxOptions);
},
sucess: function(result) {
alert('done');
}
});
您可以按以下格式对 URL 中的基本身份验证凭据进行编码:
https://username:password@www.example.com/abc
因此,请以相同的方式调整您的 ajax URL。
如果您可以控制服务器端代码,则可以滚动自己的身份验证标头,以防止浏览器弹出标准的基本挑战。 例如,如果标头为:
WWW-Authenticate: Basic realm="realm here"
然后浏览器将弹出挑战。 但是如果你的标题是:
WWW-Authenticate: my-basic realm="insert realm"
然后浏览器不会弹出 401 质询。