我正在尝试在CakePHP API中使用基本身份验证,我可以使用jQuery进行交流。
运行此代码可以正常运行:
$.ajax({
type: 'GET',
url: 'http://username:password@domain.com',
dataType: 'jsonp',
success: function(data) {
console.log(data);
}
});
注意:我将用户名和密码放在URL中,因为否则不会使用JSONP作为数据类型发送标头,然后使用beforeSend等
但是,然后运行此代码作为上面的AFLACEMENT运行上面的内容也可以(注意我不再发送用户名和密码)。
$.ajax({
type: 'GET',
url: 'http://domain.com',
dataType: 'jsonp',
success: function(data) {
console.log(data);
}
});
浏览器正在记住用户,因此代码不再需要标头来向CakePHP API发出请求。但如果它是无国籍的......这应该不会发生吗?
我认为您必须将每个请求的标头发送到基本身份验证吗?
任何人都能解释一下吗?
答案 0 :(得分:1)
在第一次请求期间,服务器实际在响应标头中发出WWW-Authenticate字段,并向您回复质询验证,要求您输入正确的用户名和密码。在您的情况下,您将它们包含在URL中。
下次再次向服务器发送请求时,客户端的请求标头现在将包含一个授权字段(即Authorization: Basic c2RmZ2RmZzpkYWRmZHNmcw==
)。 c2RmZ2RmZzpkYWRmZHNmcw==
基本上是一个基本64位编码的字符串,客户端将其包含在每个后续请求的标头中,这样服务器每次都不会使用质询验证进行响应。通过对字符串进行base 64解码,您将看到该值基本上是用户名和密码(即dfgdfg:dadfdsfs
)的组合,格式为<username>:<password>
。
现在,如果您尝试关闭浏览器,授权字段将被销毁,一旦您再次尝试发出请求,服务器将再次询问正确的用户名和密码。实际上,您可以在纯文本中绕过URL中的用户名和密码。只需在请求标头中添加Authorization
字段即可。只需确保:value是正确的64位编码,并包含类型Basic
。
答案 1 :(得分:0)
通过浏览器访问受保护的资源。
与普通身份验证一样,您的代码可能正在设置一个会话,该会话会记住用户后续请求。寻找cookie响应或添加完整代码。
还要记住,基本身份验证和http(没有SSL)是灾难的匹配,因为凭据将作为未加密请求的一部分发送。