【问题标题】:slimframework request->headers don´t read Authorizationslimframework request-> headers don´t read Authorization
【发布时间】:2014-12-03 02:28:51
【问题描述】:

我正在尝试用服务器端的 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 的请求头中看到授权字符串,但它不在 slimframework 的转储数组中。

有人提示我的问题出在哪里吗?

在此先感谢您的问候

松软

【问题讨论】:

  • 如何添加登录标题?您共享的内容看起来像请求正文,而不是标头。另外,顺便说一句,无论是在请求标头中还是在其他地方,以纯文本形式发送密码都是一个真的坏主意。
  • 不,我稍后会使用 jwt,isßs 只是为了测试。我只将授权添加到标题中,而不是更多。如您所见,如果是标头对象 Slim\Http\Headers
  • 请分享一个代码示例,展示您如何设置这些标头。这样我们就能更好地为您提供帮助。
  • 正如我所描述的,我使用 mac 程序进行了测试,该程序通过使用值“jwt-test”定义标题字段“授权”来生成 rest api 调用。第二个测试是在我的 angularjs 应用程序中,我使用拦截器向每个请求添加授权标头:config.headers.Authorization = 'Bearer' + $window.sessionStorage.tokenUUID;
  • 我也有类似的问题。你能检查一下stackoverflow.com/questions/64107875/…

标签: rest http-headers authorization slim


【解决方案1】:

问题

基本身份验证标头应如下所示。

Authorization: Basic cm9vdDp0MDBy

Basic后面的字符串是通过将用户名和密码组合成一个类似username:password的字符串来构造的。然后使用 base64 对生成的字符串进行编码。

您正在将标头发送到 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

【讨论】:

  • 嗨米卡,感谢您的解释。据我了解,Apache 希望接受一种特殊格式的授权值?你能分享一些定义这个的链接吗?我在我的 angularJS 应用程序中尝试了 config.headers.Authorization = 'Bearer' + $window.sessionStorage.tokenUUID;但是当我转储标头对象时,我仍然看不到授权字段。
  • 谢谢米卡。不幸的是,由于另一个项目,我不得不停下来。我希望我能够在下周回到这个项目并尝试实施您的解决方案。
  • @Mika Tuuplola 我试过你的答案,但没有用。打印所有标题不显示授权标题。我正在使用 nginx
【解决方案2】:

因为我也为此苦苦挣扎,这是我发现的 here in the Slim documentation 描述的内容,无需向 .htaccess 文件添加任何内容

$request->getHeader("Authorization");

【讨论】:

    猜你喜欢
    • 2022-12-02
    • 2022-12-27
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    • 2022-12-02
    • 1970-01-01
    • 2023-03-11
    • 2019-05-12
    相关资源
    最近更新 更多