我正在尝试使用两条腿OAuth作为身份验证机制将iPhone应用程序连接到PHP API。我正在使用http://code.google.com/p/oauth/中的PHP和Objective-C 2.0库。问题是,当我尝试使用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标头的最佳方法是什么?
答案 0 :(得分:8)
我认为两种方式对于OAuth规范同样有效,对吧?
是的,没错。
用PHP读取Authorization标头的最佳方法是什么?
PHP中的请求标头存储在$_SERVER
超全局数组中,每个标头都作为它自己的条目:$_SERVER['HTTP_AUTHORIZATION']
很可能在你的情况下,只是做
var_dump($_SERVER);
并查找信息。 Detailed information how PHP deals with the HTTP request
不幸的是,Authorization
标头已被PHP(?)过滤,因此它不属于$_SERVER
。
当使用PHP作为Apache模块时,解决方法是使用apache_request_headers()
函数来检索所有请求标头。
对于F / CGI,解决方法是将带有Mod_Rewrite的Authorization标头设置为模仿PHP转换HTTP请求标头的方案的环境变量:
RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)$ [NC]
RewriteRule .* - [E=HTTP_AUTHORIZATION:%1]
mod_rewrite解决方案也适用于运行mod_php的PHP。帽子乔恩尼兰德。