BASIC認証のユーザー名をPHPで読みだす
.htaccessと.htpasswdでBASIC認証しているときに、PHPでそのユーザー名を読む方法<?php
echo "User: ".$_SERVER['PHP_AUTH_USER'];
echo "<br/>";
echo "Pass: ".$_SERVER['PHP_AUTH_PW'];
$_SERVER['PHP_AUTH_USER']でユーザー名
$_SERVER['PHP_AUTH_PW']でパスワード
が読み取れる
PHPだけで、認証画面を出す方法
<?php
header('WWW-Authenticate: Basic realm="Enter username and password."');
header('Content-Type: text/plain; charset=utf-8');
PHPだけでBASIC認証することが可能です。
上記で、ブラウザとかがだす認証ダイアログを表示することが可能です。
「Enter username and password.」という文字も表示されるかと・・。
PHPだけで、BASIC認証
<?php
switch (true) {
case !isset($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']):
case $_SERVER['PHP_AUTH_USER'] !== 'admin':
case $_SERVER['PHP_AUTH_PW'] !== 'test':
header('WWW-Authenticate: Basic realm="Enter username and password."');
header('Content-Type: text/plain; charset=utf-8');
die('このページを見るにはログインが必要です');
}
header('Content-Type: text/html; charset=utf-8');
?>
<!DOCTYPE html>
<html>
...
</html>
引用元:PHPを利用したBasic認証の仕組み - Qiita一番短くて、流れがわかりやすいと思います。
詳細は、引用元で・・。
>case !isset($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']):
ユーザー名とパスワードの変数に何も入っていない場合、つまり認証ダイアログでまだ認証していない状態
> case $_SERVER['PHP_AUTH_USER'] !== 'admin':
> case $_SERVER['PHP_AUTH_PW'] !== 'test':
ユーザー名「admin」パスワード「test」以外の時は
上記の時は、認証ダイアログをだすというロジックになってます。
上記外の時は、そのまま下のロジックに流れるので、したのロジックで表示すべき内容を書けばOKです。
BASIC認証は本当に平文でデータが流れてます
header('Authorization: Basic ' . base64_encode("{$username}:{$password}"));
・PHPを利用したBasic認証の仕組み - Qiita上記リンク先の解説が分かりやすいと思う。
参考
・PHP: PHP による HTTP 認証 - Manual・BASIC認証とDigest認証、hydraによる辞書攻撃 - ろば電子が詰まっている
・PHPでお手軽ダイジェスト認証 (Digest認証) - EC studio 技術ブログ
スポンサーリンク