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

yan*_*nis 1 php header oauth

我正在尝试使用2脚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"
Run Code Online (Sandbox Code Playgroud)

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

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

hak*_*kre 8

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

是的,对.

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

PHP中的请求标头存储在$_SERVER超全局数组中,每个标头作为它自己的条目:$_SERVER['HTTP_AUTHORIZATION']最有可能在你的情况下,只是做

var_dump($_SERVER);
Run Code Online (Sandbox Code Playgroud)

并寻找信息.有关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]
Run Code Online (Sandbox Code Playgroud)

mod_rewrite解决方案也适用于运行mod_php的PHP.帽子乔恩尼兰德.