【问题标题】:How to read the OAuth request parameters with PHP?如何使用 PHP 读取 OAuth 请求参数?
【发布时间】:2011-09-28 18:19:14
【问题描述】:

我正在尝试使用 2-legged OAuth 作为身份验证机制将 iPhone 应用程序连接到 PHP API。我正在使用来自 http://code.google.com/p/oauth/ 的 PHP 和 Objective-C 2.0 库。问题是,当我尝试使用 Objective-C 发出 GET 请求时,它不包括请求 URI 中的 OAuth 参数,就像发出 OAuth GET 请求时 PHP 库所做的那样:

http://www.mysite.com/oauth/index.php?oauth_consumer_key=key&oauth_nonce=XXXXXXXX&oauth_signature=XXXXXXXXXXX%3D&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1309863754&oauth_version=1.0

而是将 OAuth 参数放在 Authorization 标头中:

Authorization: OAuth realm="", oauth_consumer_key="XXXXX", oauth_token="XXXX-XXXX",
oauth_signature_method="HMAC-SHA1", oauth_signature="XXXXXXXX", 
oauth_timestamp="1309863855", oauth_nonce="XXXX-XXX-XX-XX-XXXXXXX", oauth_version="1.0"

我想这两种方式对于 OAuth 规范同样有效,对吧?

使用 PHP 读取授权标头的最佳方法是什么?

【问题讨论】:

    标签: php oauth header


    【解决方案1】:

    我想这两种方式对 OAuth 规范同样有效,对吧?

    是的,没错。

    使用 PHP 读取授权标头的最佳方法是什么?

    PHP 中的请求标头存储在 $_SERVER 超全局数组中,每个标头都作为它自己的一个条目:$_SERVER['HTTP_AUTHORIZATION'] 很可能在您的情况下,就这样做

    var_dump($_SERVER);
    

    然后查找信息。 Detailed information how PHP deals with the HTTP request.

    PHP 中缺少授权标头

    不幸的是,Authorization 标头已被 PHP(?) 过滤,因此它不是 $_SERVER 的一部分。

    解决方法:apache_request_headers()

    当使用 PHP 作为 Apache 模块时,一种解决方法是使用 apache_request_headers() 函数来检索所有请求标头。

    解决方法:mod_rewrite

    对于 F/CGI,一种解决方法是使用 Mod_Rewrite 将 Authorization 标头设置为模拟 PHP 转换 HTTP 请求标头的方案的环境变量:

    RewriteEngine on
    RewriteCond %{HTTP:Authorization} ^(.*)$ [NC]
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%1]
    

    mod_rewrite 解决方案也应该适用于使用 mod_php 运行的 PHP。帽子提示 Jon Nylander。

    【讨论】:

    • 这就是我试图做的,但不幸的是,HTTP_AUTHORIZATION 无处可寻……除了这个之外,所有其他标头都在那里。
    • 您使用的是哪个网络服务器以及您的 PHP 的 SAPI 类型是什么?
    • Authorization 标头由 PHP 过滤,因此它不是 $_SERVER 的一部分。在 Apache 上,您可以使用 apache_request_headers() 函数来检索所有请求标头。对于 F/CGI 我还在寻找
    • Apache 和 CGI​​/FastCGI 分别
    • 要在 cgi 上将授权标头传递给环境,请尝试以下 Apache 重写规则:gist.github.com/1069562
    猜你喜欢
    • 2021-07-08
    • 2015-08-13
    • 2016-09-18
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多