slimframework请求 - >标题不读取授权

时间:2014-10-08 12:18:49

标签: rest http-headers authorization slim

我正在尝试在服务器端和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

2 个答案:

答案 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");