HTTPメッセージに複数の認証ヘッダーを含めることはできますか?具体的には、Bearerトークンタイプ(OAuthアクセストークンを渡す)とBasicタイプ(base64エンコードされたユーザー名:パスワードを渡す)のいずれかを含めたいと思います。
GET /presence/alice HTTP/1.1
Host: server.example.com
Authorization: Bearer mF_9.B5f-4.1JqM
Authorization: Basic YXNkZnNhZGZzYWRmOlZLdDVOMVhk
これが不可能な理由はないと思いますが、コミュニティに確認して確認したかっただけです。
これは可能であるはずです、フィールド値の間にコンマを追加するだけです、例えば:
GET /presence/alice HTTP/1.1
Host: server.example.com
Authorization: Bearer mF_9.B5f-4.1JqM, Basic YXNkZnNhZGZzYWRmOlZLdDVOMVhk
これは RFC72 、セクション3.2.2、フィールド順序で定義されています:
送信者は、そのヘッダーフィールドのフィールド値全体がコンマ区切りリストとして定義されていない場合(つまり、#(values)]またはヘッダーフィールドがwell-既知の例外(下記のとおり)。
受信者は、メッセージのセマンティクスを変更せずに、同じフィールド名を持つ複数のヘッダーフィールドを1つの「フィールド名:フィールド値」のペアに結合し、後続の各フィールド値を結合フィールド値に順番に追加して、コンマ。したがって、同じフィールド名を持つヘッダーフィールドが受信される順序は、結合されたフィールド値の解釈にとって重要です。プロキシは、メッセージを転送するときにこれらのフィールド値の順序を変更してはなりません。
すべてのWebサーバーがこれを受け入れるかどうかはわかりません。この記事を書いている時点では、それが機能するかどうかについて同僚との議論の最中です。
いいえ、できません。 http://greenbytes.de/tech/webdav/rfc7235.html#header.authorization の構文定義を参照してください
同様の質問がありました。これは非常に一般的な問題のようです( 質問へのリンク )。最終的に、ベアラートークンの認証ヘッダーを次のような非標準のものに変更しました。
X-Auth:ベアラーmF_9.B5f-4.1JqM
このように、これは単なる別のHTTPヘッダーであり、基本的なhttp認証が渡されます。独自のAPIを開発している場合、これは問題ないはずです。
いくつかのさらなる研究
RFC 2617 に基づいて、興味深い詳細をいくつか示します。
ユーザーエージェントは、理解している最も強力なauth-schemeを持つチャレンジの1つを使用し、そのチャレンジに基づいてユーザーに資格情報を要求することを選択しなければなりません。
多くのブラウザはBasicのみを認識し、それが最初に提示されるauth-schemeである必要があることに注意してください。サーバーには、最低限必要な場合にのみBasicを含める必要があります。
複数の認証ヘッダーを持つことは可能ですが、複数の認証を受け入れるAPIの統合中に同じ問題が発生しました。
React jsは、複数の認証トークンを受け入れるAPIを呼び出す例です。
axios.get(Constants.API+Constants.GET_USER, { headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
"Authorization": Constants.AUTH_Element + ',' + Constants.AUTH_ORG + ','+
Constants.AUTH_USER
}})
.then(function (response) {
// handle success
console.log(response);
})
.catch(function (error) {
// handle error
console.log(error);
})
.finally(function () {
// always executed
});