これの焼き直し
www.php.net
BASIC認証の基本的な動き
基本的に、BASIC認証は2回アクセスが来る。
1回目は認証なし。サーバは一旦 401 で突っ返す。 2回目でBASIC認証が来る。
BASIC認証ではリクエストヘッダに Authorization が追加される
Authorization:Basic SE9HRTpQSVlP
PHPでの基本的な書き方
<? $_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と解釈される)