【发布时间】:2018-11-07 19:12:41
【问题描述】:
我正在实施 JWT 身份验证,但标题中设置的授权有问题。
看起来请求中没有设置“授权”标头。
我收到了客户端发送的 2 个请求,第一个,请求中的 Authorization 标头传递:
// GET PROJECTS NAME
projects.getName = () => { // === projects.getName = function() { ... }
return $http.get(Global.url_api+'action=GETINFO&table=Projects');
}
浏览器中的请求:
Accept: application/json, text/plain, */*
Accept-Encoding: gzip, deflate
Accept-Language: fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOi....
Host: *******-tpinst.fr
Origin: http://localhost:2000
Proxy-Connection: keep-alive
Referer: http://localhost:2000/
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36
但我的第二个请求与第一个请求相同,但没有通过此授权标头:
users.get = function(project){
return $http.get(Global.url_api+'action=GET&table='+project+'_users');
}
在浏览器中:
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7
Access-Control-Request-Headers: authorization
Access-Control-Request-Method: GET
Host: bouygues-tpinst.fr
Origin: http://localhost:2000
Proxy-Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36
授权在主程序中设置:
app.config(['$httpProvider', function($httpProvider) {
$httpProvider.defaults.headers.common['Authorization'] = 'Bearer
'+localStorage.getItem('tokenAPI');
}])
我用这些行在我的服务器端设置了允许来源:
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE,
OPTIONS');
header('Access-Control-Allow-Headers: Origin, Content-Type, Authorization');
我是这些安全概念的初学者,请指导我一个好的方法
编辑:
我刚刚发现了一个提示,在我的 api.php 中我得到了这一行来向客户端发送错误 401:
$Authorization = $_SERVER['HTTP_AUTHORIZATION'];
//Looking for authorization headers
if($Authorization){ ... }
else {
header('HTTP/1.0 401 Unauthorized'); //Give error code 401
echo 'Token not found in the header';
}
当我删除时
header('HTTP/1.0 401 Unauthorized');
标头中的授权传递
【问题讨论】: