Basic 認証ジェネレーター

ユーザー名とパスワードから HTTP Basic 認証ヘッダーを生成し、そのまま貼れる curl コマンドも出力。既存の Basic トークンを資格情報に戻すデコードにも対応。

HTTP Basic 認証ヘッダーを作成し、既存のものをデコードします。 ユーザー名とパスワードを入力すると、Authorization ヘッダー、生の base64 トークン、そして端末にそのまま貼れる curl コマンドが得られます。下部のデコーダーで既存トークンを逆変換できます。

既存トークンのデコード

すべての処理はブラウザ内で行われ、データは送信されません。とはいえ、本ページを含むいかなる Web ページにも本番の資格情報を貼り付けないでください。

HTTP Basic 認証の実際の仕組み

仕組みそのもの

RFC 7617 で定義される Basic 認証は、HTTP で最も単純な認証方式です。クライアントはユーザー名とパスワードをコロンで連結し、その結果を base64 でエンコードしてヘッダーに載せます。

Authorization: Basic YWxpY2U6czNjcjN0

サーバーが資格情報を要求するときは 401 UnauthorizedWWW-Authenticate: Basic realm="..." を返し、ブラウザがネイティブのログインダイアログを表示します。ハンドシェイクもノンスも有効期限もなく、すべてのリクエストが同じヘッダーを運びます。

base64 は暗号化ではない

これは必ず身体に染み込ませるべき点です。base64 は鍵も秘密も持たない可逆的な転送エンコーディングです。ヘッダーを見た人は誰でも即座にデコードできます。本ページのデコーダーがやっているのはまさにそれです。したがって Basic 認証それ自体の機密性はゼロであり、TLS がリクエスト全体を保護する HTTPS 上でのみ使うべきです。平文 HTTP では、パスワードを平文で送るのと変わりません。

コロンの規則

ユーザー名にコロンを含めることはできません。最初のコロンが区切りだからです。パスワードにはいくつ含まれていても構いません。デコーダーは最初のコロンで分割し、残りをすべてパスワードとして扱います。ユーザー名にどうしてもコロンが必要なら、Basic 認証は使えず別の方式が必要です。

文字エンコーディング

初期の仕様は ASCII 外について曖昧で、歴史的に非 ASCII のパスワードがクライアントとサーバーの間で壊れる原因になっていました。RFC 7617 はサーバーが期待を宣言できるよう charset="UTF-8" パラメータを追加し、実務では現代のスタックはすべて UTF-8 を使います。本ツールも base64 の前に UTF-8 バイト列へ変換し、現在のブラウザの挙動に合わせています。

今でも妥当な用途

Basic 認証は次の場面では依然として合理的です。内部ネットワークでのマシン間通信、nginx や Apache の背後にあるステージング環境の簡易保護、単純な資格情報が必要な CI ジョブ、そして API キーの運搬手段として(キーをユーザー名欄に入れ、パスワードは空か x のようなプレースホルダーにする)。決済系やメール系の API のいくつかは、まさにこのパターンです。

一方、公開サイトのエンドユーザーログインには不向きです。ログアウトの手段がなく、ブラウザはセッション中ずっと資格情報をキャッシュし、ダイアログのスタイルも変更できず、多要素認証やセッション単位のレート制限も追加できません。

実務上の注意

URL に埋め込む資格情報(user:pass@example.com)は非推奨で、履歴・ログ・リファラヘッダーに漏れるため、多くのブラウザがブロックまたは削除します。curl に -u user:pass を渡すのも、シェル履歴とプロセス一覧にパスワードを残すため、同じマシンの他ユーザーから見えてしまいます。-u user だけを指定して curl に入力を促させるか、環境変数から読み込むほうが安全です。

オープンソースに関する注記:RFC 7617 に従い、標準の btoaatobTextEncoderTextDecoder API で実装しています。サードパーティライブラリは使用していません。

よくある質問

Basic 認証は安全ですか?
HTTPS 上でのみ安全です。base64 エンコードは保護を一切提供せず、簡単に元に戻せます。TLS があれば他のリクエストデータと同様に保護されますが、なければ実質的に平文です。
暗号化でないなら、なぜ base64 を使うのですか?
目的は秘匿ではなく転送の安全性です。base64 は資格情報がヘッダーで安全な ASCII 文字のみになることを保証するので、パスワード中のコロン・空白・非 ASCII バイトがヘッダーを壊すことがありません。
ユーザー名にコロンを含められますか?
できません。最初のコロンがユーザー名とパスワードの区切りなので、ユーザー名に含めると資格情報が曖昧になります。パスワードにはいくつ含めても構いません。
Basic 認証からログアウトするには?
適切な仕組みは存在しません。ブラウザはセッション中資格情報をキャッシュし、一般的な回避策はブラウザを閉じるか、特定のエンドポイントで 401 を返すことです。
トークンは失効しますか?
しません。パスワードが変わるまで同じヘッダーが有効なので、Basic トークンの流出はパスワードの流出と同じ重大さです。露出したら直ちに資格情報をローテーションしてください。
資格情報はどこかに送信されますか?
いいえ。エンコードもデコードも完全にブラウザ内で実行されます。とはいえ、本番の資格情報を Web ページに貼り付けない習慣が重要です。