TwitterのAPIでは、APIシークレットキーと連結されたAPIキーのbase64エンコーディングであるAuthorizationヘッダーを送信する必要があります。ノードでは、次のものを使用します。
var base64 = new Buffer(apiKey + ':' + apiSecret).toString('base64');
送信されるヘッダーは次のようになります。
Authorization: 'Basic ' + base64
文字列「apiKeyHere:apiSecretHere」をエンコードするbase64のポイントは何ですか?生のAPI資格情報を含むAuthorizationヘッダーを受け入れないのはなぜですか?
この質問は base 64エンコーディングの目的とHTTP基本認証で使用される理由 に似ていますが、投票された回答では私の質問に完全には答えられません。 TwitterのAPIキーとAPIシークレットキーはすでにHTTP互換の文字です。それらは次のようになります(これらは本物ではありません):
コンシューマーキー(APIキー)8dme3utVQfOhlPk5BUG9XbFxR
コンシューマーシークレット(APIシークレット)QFZXoC7MP72JZtGMBNpjLGI4Vl1xr1q9dyPLp3u7jGtkESpbLm
では、なぜbase64でエンコードするのでしょうか。さらに、その投稿には、「エンコードの目的は、ユーザー名またはパスワードに含まれる可能性のあるHTTP互換ではない文字をHTTP互換の文字にエンコードすることです」と記載されています。ユーザー名とパスワードはすでにHTTP互換の文字ではないでしょうか?
W3のドキュメントでは見つかりませんが、コンテンツの内容に関係なく、Authorizationヘッダーの資格情報をbase64にエンコードするのは単なるプロトコルだと思います。 Twitterの場合、あなたが言ったようにそれはあまり違いはありませんが、他の場合には、資格情報にこれらの文字を含めることができます。均一に保ち、エンコードするかどうかの間違いを防ぐために、すべての資格情報をエンコードする必要があります。
もう1つの理由は、ブラウザーも同じ方法で資格情報をエンコードすることです。 Twitterもおそらくそれを受け入れたいと思うでしょう。
デフォルトでは、Hypertext Transfer Protocol (HTTP)
メッセージのメッセージヘッダーフィールドパラメータは、ISO- 8859-1文字セット外の文字を運ぶことはできません。
ユーザー名とパスワードに互換性のない文字セットが含まれている場合、HTTPはそれらのテキストを運ぶことができません。これを防ぐために、ユーザー名とパスワードをbase64でエンコードして、HTTP互換の文字を[〜#〜] http [〜#〜]。詳細については、これを参照してください Basic_access_authentication
文字列は、セキュリティのためではなく、HTTP互換ではない文字を、ユーザー名またはパスワードに含まれる可能性のあるHTTP互換文字にエンコードするためにbase64でエンコードする必要があります。