这个 HTTP-Get 基本验证码有什么问题?
What is wrong with this HTTP-Get Basic authentication code?
我正在使用 node.js restify 作为 运行 REST API 服务器的后端,并使用 angularjs 作为 front-end 来调用 HTTP GET。 REST 服务器使用 HTTP 基本身份验证。用户名是 foo
,密码是 bar
。
我已经使用 restify 客户端测试了后端代码是否有效。这是工作客户端代码;
var client = restify.createJsonClient({
url: 'http://127.0.0.1'
});
client.basicAuth('foo', 'bar');
client.get('/alert?list=alertList', function(err, req, res, obj) {
console.log(obj);
});
我的 angularjs http-get 代码无法正常工作。这是相关代码;
.controller('ViewCtrl', ['$scope', '$http', '$base64',
function ($scope, $http, $cookies, $base64) {
var url = '127.0.0.1/alert?list=alertList';
var auth = $base64.encode('foo:bar');
$http.defaults.headers.common['Authorization'] = 'Basic ' + auth;
$http.get(url).then(function (response) {
tableData = response.data;
//handle data
});
}
我无法弄清楚 angularjs 代码有什么问题。我正在使用 restify authorizationParser。是否有任何额外的 header 要求来获得与 restify authorizationParser 一起使用的 HTTP 基本身份验证?
浏览器上的错误消息如下所示;
{
code: "NotAuthorized",
message: ""
}
在chrome调试器中,这是我看到的;
Request Method:GET
Status Code:403 Forbidden
Remote Address:127.0.0.1:80
Request Headers
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4,zh-TW;q=0.2,ja;q=0.2
Cache-Control:max-age=0
Connection:keep-alive
Host:127.0.0.1
If-Modified-Since:Wed, 23 Dec 2015 02:22:04 GMT
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36
我正在使用这个 base64 angular 模块。
https://github.com/ninjatronic/angular-base64
编辑:我发现 angular 代码没有任何内容。问题出在 restify 服务器上。 restify 服务器支持静态 web 服务器,当启用 http 基本身份验证时,此静态 web 服务器停止工作。
在controller内部,你可以像这样通过认证header:
var url = '127.0.0.1/alert?list=alertList';
var auth = $base64.encode('foo:bar');
var headers = {"Authorization": "Basic " + auth};
$http.get(url, {headers: headers}).then(function (response)
tableData = response.data;
//handle data
});
我正在使用 node.js restify 作为 运行 REST API 服务器的后端,并使用 angularjs 作为 front-end 来调用 HTTP GET。 REST 服务器使用 HTTP 基本身份验证。用户名是 foo
,密码是 bar
。
我已经使用 restify 客户端测试了后端代码是否有效。这是工作客户端代码;
var client = restify.createJsonClient({
url: 'http://127.0.0.1'
});
client.basicAuth('foo', 'bar');
client.get('/alert?list=alertList', function(err, req, res, obj) {
console.log(obj);
});
我的 angularjs http-get 代码无法正常工作。这是相关代码;
.controller('ViewCtrl', ['$scope', '$http', '$base64',
function ($scope, $http, $cookies, $base64) {
var url = '127.0.0.1/alert?list=alertList';
var auth = $base64.encode('foo:bar');
$http.defaults.headers.common['Authorization'] = 'Basic ' + auth;
$http.get(url).then(function (response) {
tableData = response.data;
//handle data
});
}
我无法弄清楚 angularjs 代码有什么问题。我正在使用 restify authorizationParser。是否有任何额外的 header 要求来获得与 restify authorizationParser 一起使用的 HTTP 基本身份验证?
浏览器上的错误消息如下所示;
{
code: "NotAuthorized",
message: ""
}
在chrome调试器中,这是我看到的;
Request Method:GET
Status Code:403 Forbidden
Remote Address:127.0.0.1:80
Request Headers
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4,zh-TW;q=0.2,ja;q=0.2
Cache-Control:max-age=0
Connection:keep-alive
Host:127.0.0.1
If-Modified-Since:Wed, 23 Dec 2015 02:22:04 GMT
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36
我正在使用这个 base64 angular 模块。 https://github.com/ninjatronic/angular-base64
编辑:我发现 angular 代码没有任何内容。问题出在 restify 服务器上。 restify 服务器支持静态 web 服务器,当启用 http 基本身份验证时,此静态 web 服务器停止工作。
在controller内部,你可以像这样通过认证header:
var url = '127.0.0.1/alert?list=alertList';
var auth = $base64.encode('foo:bar');
var headers = {"Authorization": "Basic " + auth};
$http.get(url, {headers: headers}).then(function (response)
tableData = response.data;
//handle data
});