Quantcast
Viewing all articles
Browse latest Browse all 114

PHPでBASIC認証を受け付ける。 wgetでテストする。

これの焼き直し
www.php.net

BASIC認証の基本的な動き

基本的に、BASIC認証は2回アクセスが来る。
1回目は認証なし。サーバは一旦 401 で突っ返す。 2回目でBASIC認証が来る。

BASIC認証ではリクエストヘッダに Authorization が追加される

Authorization:Basic SE9HRTpQSVlP

ユーザ名 HOGE, パスワード PIYO がBASE64エンコードされている。

PHPでの基本的な書き方

PHPでは、BASIC認証時に次の変数が追加される

<?$_SERVER['HTTP_AUTHORIZATION']='Basic SE9HRTpQSVlP';
$_SERVER['PHP_AUTH_USER']='HOGE';
$_SERVER['PHP_AUTH_PW']='PIYO';

ユーザ名とパスワードがデコードされてて助かる。

<?$user=$_SERVER['PHP_AUTH_USER']??"";
$pass=$_SERVER['PHP_AUTH_PW']??"";
if($user==""){header('WWW-Authenticate: Basic realm="My Realm"');
    header('HTTP/1.1 401 Authorization Required');
    echo"ERROR: OTOTOI KIYAGARE");
    exit(1);
}if( authcheck($user, $pass)){

WWW-Authenticate: Basic realm="My Realm"を返すのが重要。 リクエスト側は認証の種類がBASIC認証であることがわからないので アホになってしまう。
もうむしろ 401 を自分で返さなくてもよい(なんか勝手に401と解釈される)

wgetでのテスト

wget --http-user="HOGE"--http-password="PIYO" http://192.168.1.78/hoge.php

引数に ユーザ名とパスワードをつけると、BASIC認証してくれる。
1回目は認証なしでアクセスし、2回目でBASIC認証する。

wget --auth-no-challenge--http-user="HOGE"--http-password="PIYO" http://192.168.1.78/hoge.php

--auth-no-challenge をつけることで、1回目からBASIC認証にいってくれる。


Viewing all articles
Browse latest Browse all 114

Trending Articles