1. ホーム
  2. http

[解決済み] HTTP基本認証に使用するエンコーディングは何ですか?

2023-03-26 06:49:42

質問

RFC2617では、ユーザ名とパスワードをbase64にエンコードするように言っていますが、base64アルゴリズムに入力するオクテットを作成するときに使用する文字エンコーディングについては書いてありません。

US-ASCII か UTF8 と仮定すべきでしょうか? あるいは、誰かがすでにどこかでこの質問に決着をつけたのでしょうか?

どのように解決するのですか?

元の仕様 - RFC 2617

RFC 2617 は "ISO-8859-1" または "undefined" として読むことができます。お好みでどうぞ。多くのサーバがISO-8859-1を使用していることは知られており(好むと好まざるとにかかわらず)、それ以外のものを送信すると失敗します。ですから、おそらく唯一の安全な選択は、ASCIIにこだわることです。

より詳細な情報とこの状況を修正するための提案については、草稿 HTTP 基本認証のエンコードパラメータ("An Encoding Parameter for HTTP Basic Authentication" (これは RFC 7617 の基礎となったものです) を参照してください。

新規 - RFC 7617

2015年から RFC 7617 があります。 があり、RFC2617は廃止されました。旧RFCとは対照的に、新RFCではユーザー名とパスワードに使用する文字エンコーディングを明示的に定義しています。

  • デフォルトのエンコーディングはまだ未定義です。US-ASCII と互換性があることだけが要求されます (UTF-8 のように ASCII バイトを ASCII バイトにマップすることを意味します)。
  • サーバはオプションで追加の認証パラメータ charset="UTF-8" を送ることができます。

    WWW-Authenticate: Basic realm="myChosenRealm", charset="UTF-8"

    これは、サーバがユーザ名/パスワードに非 ASCII 文字を受け入れること、そしてそれらが UTF-8 (特に Normalization Form C) でエンコードされていることを告知します。UTF-8のみが許可されることに注意してください。

完全版です。

読む 仕様書 . そこには、正確なエンコード手順や、サポートすべきUnicodeコードポイントのリストなど、さらなる詳細が含まれています。

ブラウザのサポート

2018年現在、モダンブラウザは通常、ユーザーがユーザー名やパスワードに非ASCII文字を入力した場合、UTF-8をデフォルトとします(たとえサーバー側で charset パラメータを使用していなくても)。

  • Chrome も UTF-8 を使用するようです。
  • Internet Explorer は UTF-8 を使用しません ( 問題番号 11879588 )
  • Firefox は、現在 v59 で予定されている変更について実験しています ( バグ 1419658 )

領域

この 領域 パラメータは、RFC 7617 でもまだ ASCII 文字しかサポートしていません。