如何使用PHP读取OAuth请求参数


How to read the OAuth request parameters with PHP?

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

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读取Authorization标头的最佳方式是什么?

我想这两种方法对于OAuth规范都是同样有效的,对吧?

是的,对。

使用PHP读取Authorization标头的最佳方式是什么?

PHP中的请求标头存储在$_SERVER超全局数组中,每个标头都是自己的条目:在您的情况下,很可能是$_SERVER['HTTP_AUTHORIZATION'],只需执行

var_dump($_SERVER);

并查找信息。PHP如何处理HTTP请求的详细信息。

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。