Basic認証の仕組みと解除方法 ─ URL構造から理解してみた
はじめに
Basic認証の設定をした際、開発環境で一度通ったBasic認証を外す方法が分からなかったので調べてみました。
解決策
通常リクエスト
https://example-site.com/
Basic認証の解除方法
https://abc@example-site.com/
(abcは任意の文字列)
解説
1, URL構造
通常、URLは本来以下の構造になっています。
URLはログにもrefererにも残る公開情報なため、認証情報(ユーザー名・パスワード)は通常省略されています。
しかしBasic認証は、一時的にURLにユーザー名とパスワードを埋め込むことで認証情報を渡しています。
なので一度ログインに成功した場合ブラウザは認証情報を保存しておき、次に https://example-site.com/ というURLでアクセスした際に保存しておいた認証情報をURLに自動補完してサーバーに送信します。
これがBasic認証でアクセスする流れです。
2, Basic認証情報はどこに保存されている?
これ一番疑問でした。
Cookieのようにブラウザの開発者ツール > アプリケーションタブからURLを選択して削除...ではなかったので、さてどこにあるのか??🤔という感じ。
正解は、メモリ上でした。
Basic認証のログイン情報は、ブラウザのプロセスが確保しているメモリ領域に保存されます。
揮発性なので、セッションが切れたり、ブラウザを再起動したりするとログイン情報は消える、ということですね。
(ちなみにCookieは有効期限(Expires や Max-Age)が指定されている場合はディスクに書き込むので永続化でき、ブラウザを落としても残ります。)
3, 改めて解決策
メモリに保存された自動補完が適用されないようにするには、別の認証情報を含んだURLと認識させればよいです。
つまり、ユーザー名を明示的に変更することでリセット可能です。
https://abc@example-site.com/
これでブラウザが保存済みの認証情報を補完しなくなるため、再度Basic認証のダイアログが表示されるようになります。あぁよかった!
まとめ
- Basic認証の情報はURLに紐づいてブラウザのメモリに一時的に保存される。
- 認証情報を強制リセットするには、URLに別ユーザー名を加えてリクエストすればOK
原理がわかったので、「ブラウザ再起動でプロセスリセットでもBasic認証クリアは可能」というのも分かりました。
参考
Discussion