ユーザー名とパスワードから Authorization: Basic を作り、curl と fetch にそのまま貼れる形で出します
受け取った Authorization: Basic ... の値を貼り付けると、ユーザー名とパスワードに戻します。「Basic 」は付いていても付いていなくても構いません。
ユーザー名とパスワードを : でつなぎ、その文字列をBase64で符号化して Basic の後ろに置きます。user と pass なら user:pass を符号化した dXNlcjpwYXNz になり、ヘッダーは Authorization: Basic dXNlcjpwYXNz です。ユーザー名にコロンは使えません。最初のコロンが区切りとして解釈されるためで、パスワード側にコロンが入るのは問題ありません。
サーバーは保護された資源に対して 401 と WWW-Authenticate: Basic realm="..." を返し、クライアントはそれを見て Authorization を付けて再送します。ツールやスクリプトから叩くときは、401を待たずに最初からヘッダーを付けても構いません。realm はどの資格情報を使うかの目印で、認証の可否には影響しません。
このツールはUTF-8としてBase64にします。RFC 7617ではサーバーが charset="UTF-8" を示せることになっていますが、非ASCIIを含む資格情報の解釈はサーバー実装によって差があります。日本語や記号を含むパスワードで認証が通らない場合は、まずASCIIだけの値で切り分けてください。
| 使う場所 | 形 |
|---|---|
| HTTPリクエスト | Authorization: Basic dXNlcjpwYXNz |
| curl(ヘッダー指定) | curl -H 'Authorization: Basic dXNlcjpwYXNz' https://example.com/api |
| curl(-u 指定) | curl -u 'user:pass' https://example.com/api |
| fetch(JavaScript) | fetch(url, { headers: { Authorization: 'Basic dXNlcjpwYXNz' } }) |
curl の -u は同じヘッダーを内部で組み立てます。シェルの履歴やCIのログに資格情報が残る点は、どの書き方でも同じです。恒久的に使う値は環境変数やシークレット管理に置いてください。
ユーザー名とパスワードをコロンでつないだ文字列をBase64で符号化し、先頭に「Basic 」を付けます。user と pass なら user:pass をBase64にした dXNlcjpwYXNz を使い、Authorization: Basic dXNlcjpwYXNz となります。暗号化ではなく単なる符号化です。
いいえ。Base64は誰でも復号できる符号化で、秘匿性はありません。Basic認証の資格情報は実質的に平文で送られるため、HTTPSでない通信では盗聴で読み取られます。Basic認証を使う場合はTLSを必須にしてください。
このツールはUTF-8として符号化します。RFC 7617ではサーバーが charset="UTF-8" を示せることになっていますが、実際の解釈はサーバー実装によって異なります。ユーザー名にコロンを含めることはできません(区切り文字として解釈されます)。