PHP獲取AUTHORIZATION認證驗證
阿新 • • 發佈:2018-12-12
做介面認證的時候,我們可能會用到自定義header頭Authorization。 我們都知道php的自定義頭資訊都可以使用$SERVER['HTTP*']來獲取,如header('test: wzhtest');獲取的時候,我們可以使用$_SERVER['HTTP_TEST']來獲取。
- 這裡說明下。Authorization可能是個例外。nginx沒問題,但是Apache下可能會出現一個問題。那就是我們使用$_SERVER['HTTP_AUTHORIZATION']可能就獲取不到值。
Apache伺服器下,我們需要開啟rewrite_module模組,然後編輯.htaccess檔案,在上面加入
#Authorization Headers
RewriteCond %{HTTP:Authorization} ^(.+)$
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
如果沒有開啟過rewrite_module模組,我們需要新建.htaccess 內容如下:
Options +FollowSymlinks -Multiviews RewriteEngine On #Authorization Headers RewriteCond %{HTTP:Authorization} ^(.+)$ RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
通過下面的方法我們可以相容的處理:
public function getBasicAuthorized(){ $UserName = ''; $PassWord = ''; //Apache伺服器 if (isset($_SERVER['PHP_AUTH_USER'])) { $UserName = $_SERVER['PHP_AUTH_USER']; $PassWord = $_SERVER['PHP_AUTH_PW']; }elseif(isset($_SERVER['HTTP_AUTHORIZATION'])){//其他伺服器如 Nginx Authorization if (strpos(strtolower($_SERVER['HTTP_AUTHORIZATION']), 'basic') === 0) { $Authorization = explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6))); $UserName = isset($Authorization[0])?$Authorization[0]:''; $PassWord = isset($Authorization[1])?$Authorization[1]:0; } } return array($UserName,$PassWord); }