編碼的世界 / 優質文選 / 文明

PHP獲取AUTHORIZATION認證驗證


2022年7月13日
-   

做接口認證的時候,我們可能會用到自定義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);
}

 

熱門文章