[英]Multiple HTTP Authorization headers?
是否可以在 HTTP 消息中包含多個授權標頭? 具體來說,我想包括一種不記名令牌類型(傳遞 OAuth 訪問令牌)和一種基本類型(傳遞 base64 編碼的用戶名:密碼)。
GET /presence/alice HTTP/1.1
Host: server.example.com
Authorization: Bearer mF_9.B5f-4.1JqM
Authorization: Basic YXNkZnNhZGZzYWRmOlZLdDVOMVhk
我沒有理由認為這是不可能的,只是想與社區一起審查以確保。
**** 2021 年 2 月更新 *** 請閱讀對此回復的評論。 他們的一般結論似乎是一些 Web 服務器接受多個授權方案,但它違反了 RFC 7230/7235 ****
這應該是可能的,您只需要在字段值之間添加一個逗號,例如:
GET /presence/alice HTTP/1.1
Host: server.example.com
Authorization: Bearer mF_9.B5f-4.1JqM, Basic YXNkZnNhZGZzYWRmOlZLdDVOMVhk
這在RFC7230 的第 3.2.2 節,字段順序中定義:
發送方不得在消息中生成多個具有相同字段名稱的頭字段,除非該頭字段的整個字段值被定義為逗號分隔列表 [即,#(values)] 或頭字段是一個井-已知異常(如下所述)。
接收者可以將多個具有相同字段名稱的頭字段組合成一個“字段名稱:字段值”對,而不會改變消息的語義,通過將每個后續字段值按順序附加到組合字段值中,由逗號。 因此,接收具有相同字段名稱的頭字段的順序對於組合字段值的解釋很重要; 轉發消息時,代理不得更改這些字段值的順序。
我不知道是否所有網絡服務器都接受這一點 - 在撰寫本文時,我正與一位同事爭論它是否應該工作。
標頭字段是鍵/值對。 所以只要它們是獨一無二的並且你/程序員知道誰是誰,這很好
AuthorizationBearer: Bearer mF_9.B5f-4.1JqM
AuthorizationBasic: Basic YXNkZnNhZGZzYWRmOlZLdDVOMVhk
我的 Angular 攔截器將Authorization111: Bearer xyz123
發送到 Node API,API 將令牌提取為
var token = header.headers["authorization111"].toString().split(' ')[1];
如果您在后端使用 python,那么您可以簡單地在承載中傳遞 dict 並在后端處理它之前執行 json.loads
通過這種方式,您可以在一個授權標頭中傳遞多個值
示例:傳遞{"access_token" : access_token, "app_id" : 2}
后端json.loads("{"access_token" : access_token, "app_id" : 2}")
可能有多個授權標頭,我在集成接受多個授權的 API 時遇到了同樣的問題。
這是調用接受多個身份驗證令牌的 API 的 React js 示例。
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
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.