我正在尝试在服务器端和angularJS上实现一个简单的授权,在客户端。为了测试REST APi,我正在使用一个名为Rested for Mac的程序,它允许发送其余的呼叫。
我希望在授权完成后,在每次休息时调用一个jwt令牌,该令牌可以在slim内用于授权某些路径的请求。
现在我通过Rested传递以下标题和正文:
Accept: */*
Accept-Encoding: gzip, deflate
Content-Type: application/json
Authorization: jwt-test
Accept-Language: de-de
{
"login": "TestLogin",
"password": "TestPassword",
"uuid": "dsfglj45690dfgkl456"
}
而不仅仅是打印整个标题:
Slim\Http\Headers Object ( [data:protected] => Array ( [Host] => localhost:8888
[Content-Type] => application/json [Content-Length] => 89 [Connection]
=> keep-alive [Accept] => */* [User-Agent] => Rested/2009 CFNetwork/673.4
Darwin/13.4.0 (x86_64) (iMac13%2C2) [Accept-Language] => de-de [Accept-Encoding]
=> gzip, deflate ) )
如您所见,此数组中没有授权。
我也直接用firefox检查了这个,结果相同。 O可以在带有firebug的请求头中查看Authorization字符串,但它不在slimframework的转储数组中。
有没有人提示我的问题所在?
提前致谢并致以亲切的问候
solick
答案 0 :(得分:22)
基本身份验证标头应如下所示。
Authorization: Basic cm9vdDp0MDBy
Basic之后的字符串是通过将用户名和密码组合成username:password
之类的字符串构建的。然后使用base64对结果字符串进行编码。
您正在向Web服务器发送标头,PHP将无法解析该标头。不确定这是否被视为错误或功能。
Authorization: jwt-test
如果将以下内容添加到.htaccess文件中,请使用当前版本的Slim。
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
然后您可以使用其中任何一个来访问非标准标题。
var_dump($_SERVER["HTTP_AUTHORIZATION"]);
var_dump(apache_request_headers()["Authorization"]);
var_dump($app->request->headers("Authorization"));
它给出了以下结果:
string 'jwt-test' (length=8)
string 'jwt-test' (length=8)
string 'jwt-test' (length=8)
您还可以使用其他标题名称,例如X-Authorization
。
答案 1 :(得分:0)
因为我也为此感到困惑,所以这就是我所说的here in the Slim documentation,而无需在.htaccess文件中添加任何内容
$request->getHeader("Authorization");