最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何讓每個Http請求都自動帶上token

 更新時間:2023年03月09日 14:10:30   作者:困知勉行1985  
這篇文章主要介紹了如何讓每個Http請求都自動帶上token問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

讓每個Http請求都自動帶上token

1.將token放到cookie中

這樣每個http請求就都可以帶上token信息了。

access_token="eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJhWExsdzZEM1pJNWtkSDc2UUdGdVVtc0h1ckFKRTJXeGlZMDF3QmVKYTMwIn0......";
document.cookie = "keycloakToken=" + access_token;

下面以Django的中間件為例,看看后端是怎樣從request中得到token信息。

if not request.META.get('HTTP_COOKIE'): #判斷有沒有cookie信息。
?? ?print("Debug: can't get the cookie keycloak token");
?? ?return JsonResponse({"detail": NotAuthenticated.default_detail},
?? ??? ?status=NotAuthenticated.status_code)
else:
? ? ? ? if "keycloakToken" in request.COOKIES: # request.COOKIES是字典類型,判斷其中是否有keycloakToken這個key
?? ? ? ?accessToken =request.COOKIES["keycloakToken"]; #從cookie中取得token信息。
? ? ? ? ? ? print("Debug: the request token in cookie is: " + accessToken);
? ? ? ? else:
? ? ? ? ? ? return JsonResponse({"res": "1", "resMsg": "No Token Provided"},status=401)

2.將token放到某個http請求的header中

var token="eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJhWExsdzZEM1pJNWtkSDc2UUdGdVVtc0h1ckFKRTJXeGlZMDF3QmVKYTMwIn0........"; ?
?
prepareHeaders() {
? return new Headers({
? ? 'Content-Type': 'application/json; charset=UTF-8',
? ? 'Authorization': 'Bearer ' + token
? });
}
?
addProduct(body: any): Observable<any> {
? return this.http.post(`${this.backendUrl}/api/project/`, body, { headers: this.prepareHeaders() }).map(this.extractData);
}

下面同樣以Django的中間件為例,看看后端是怎樣從request中得到token信息。

#使用key HTTP_AUTHORIZATION從header中獲取token信息。
auth_header = request.META.get('HTTP_AUTHORIZATION').split()
accessToken = auth_header[1] if len(auth_header) == 2 else auth_header[0]

以上只是以token為例,當然了,除了token,可以帶上任何你想帶的信息。

3.使用哪種方式更好呢?

為了避開CSRF(跨站請求偽造)攻擊,請使用第二種方式,發(fā)送請求的時候不要將Token放到cookie這個header里,而應該放到自定義的header里。 

token一般存放在哪里

Token一般是存放在哪里? Token放在cookie和放在localStorage、sessionStorage中有什么不同?

Token是什么?

Token 其實就是訪問資源對憑證。一般是用戶通過用戶名和密碼登錄成功之后,服務器將登錄憑證做數(shù)字簽名,加密之后得到的字符串作為token。

Token存放位置

Token 其實就是訪問資源對憑證。一般是用戶通過用戶名和密碼登錄成功之后,服務器將登錄憑證做數(shù)字簽名,加密之后得到的字符串作為token。

它在用戶登錄成功之后會返回給客戶端,客戶端主要以下幾種存儲方式:

1、存儲在localStorage中,每次調用接口的時候都把它當成一個字段傳給后臺

2、存儲在cookie中,讓它自動發(fā)送,不過缺點就是不能跨域

3、拿到之后存儲在localStorage中,每次調用接口的時候放在HTTP請求頭的Authorization字段里面。token 在客戶端一般存放于localStorage、cookie、或sessionStorage中。

Token 放在 cookie、localStorage、sessionStorage中的不同點?

將Token存儲于localStorage或 sessionStorage

Web存儲(localStorage/sessionStorage)可以通過同一域商Javascript訪問。這意味著任何在你的網站上的運行的JavaScript都可以訪問Web存儲,所以容易受到XSS攻擊。尤其是項目中用到了很多第三方JavaScript類庫。

為了防止XSS,一般的處理是避開和編碼所有不可信的數(shù)據(jù)。但這并不能百分百防止XSS。比如我們使用托管在CDN或者其它一些公共的JavaScript庫,還有像npm這樣的包管理器導入別人的代碼到我們的應用程序中。

如果你使用的腳本中有一個被盜用了怎么辦?惡意的JavaScript可以嵌入到頁面上,并且Web存儲被盜用。這些類型的XSS攻擊可以得到每個人的Web存儲來訪問你的網站。

這也是為什么許多組織建議不要在Web存儲中存儲任何有價值或信任任何Web存儲中的信息。 這包括會話標識符和令牌。作為一種存儲機制,Web存儲在傳輸過程中不強制執(zhí)行任何安全標準。

XSS攻擊:Cross-Site Scripting(跨站腳本攻擊)簡稱XSS,是一種代碼注入攻擊。攻擊者通過在目標網站注入惡意腳本,使之在用戶的瀏覽器上運行。利用這些惡意腳本,攻擊者可以獲取用戶的敏感信息如Cookie、SessionID等,進而危害數(shù)據(jù)安全。

將Token存儲與cookie

  • 優(yōu)點:可以制定httponly,來防止被JavaScript讀取,也可以制定secure,來保證token只在HTTPS下傳輸。
  • 缺點:不符合Restful 最佳實踐。 容易遭受CSRF攻擊(可以在服務器端檢查Refer和Origin)

CSRF:跨站請求偽造,簡單的說,是攻擊者通過一些技術手段欺騙用戶的瀏覽器去訪問一個自己曾經認證過的網站并運行一些操作(如:發(fā)郵件、發(fā)信息、甚至財產操作如轉賬和購買商品)。由于瀏覽器曾經認證過,所以被訪問的網站會認為是真正的用戶操作而去運行。這利用了web中用戶身份驗證的一個漏洞:簡單的身份驗證職能保證請求發(fā)自某個用戶的瀏覽器,卻不能保證請求本身是用戶自愿發(fā)出去的。CSRF并不能夠拿到用戶的任何信息,它只是欺騙用戶瀏覽器,讓其以用戶的名義進行操作。

小結一下:

關于token 存在cookie還是localStorage有兩個觀點:

支持Cookie的開發(fā)人員會強烈建議不要將敏感信息(例如JWT)存儲在localStorage中,因為它對于XSS毫無抵抗力。

支持localStorage的一派則認為:撇開localStorage的各種優(yōu)點不談,如果做好適當?shù)腦SS防護,收益是遠大于風險的。

放在cookie中看似看全,看似“解決”(因為仍然存在XSS的問題)一個問題,卻引入了另一個問題(CSRF)

localStorage具有更靈活,更大空間,天然免疫 CSRF的特征。Cookie空間有限,而JWT一半都占用較多字節(jié),而且有時你不止需要存儲一個JWT。

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • javascript根據(jù)時間生成m位隨機數(shù)最大13位

    javascript根據(jù)時間生成m位隨機數(shù)最大13位

    javascript根據(jù)時間生成m位隨機數(shù),最大13位隨機數(shù),并且不能保證首位不為0,實現(xiàn)代碼如下,需要的朋友可以參考下
    2014-10-10
  • 微信小程序中限制激勵式視頻廣告位顯示次數(shù)(實現(xiàn)思路)

    微信小程序中限制激勵式視頻廣告位顯示次數(shù)(實現(xiàn)思路)

    本文給大家分享微信小程序中限制激勵式視頻廣告位顯示次數(shù),本文通過實例代碼來說明,感興趣的朋友跟隨小編一起看看吧
    2019-12-12
  • JavaScript實現(xiàn)伸縮二級菜單

    JavaScript實現(xiàn)伸縮二級菜單

    這篇文章主要為大家詳細介紹了JavaScript實現(xiàn)伸縮二級菜單,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 微信小程序提交form操作示例

    微信小程序提交form操作示例

    這篇文章主要介紹了微信小程序提交form操作,結合實例形式分析了微信小程序開發(fā)中使用form組件實現(xiàn)數(shù)據(jù)提交與數(shù)據(jù)處理相關操作技巧,需要的朋友可以參考下
    2018-12-12
  • js(JavaScript)實現(xiàn)TAB標簽切換效果的簡單實例

    js(JavaScript)實現(xiàn)TAB標簽切換效果的簡單實例

    本篇文章主要是對js(JavaScript)實現(xiàn)TAB標簽切換效果的簡單實例進行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-02-02
  • JavaScript ECMA-262-3 深入解析(二):變量對象實例詳解

    JavaScript ECMA-262-3 深入解析(二):變量對象實例詳解

    這篇文章主要介紹了JavaScript ECMA-262-3變量對象,結合實例形式詳細分析了JavaScript ECMA變量對象相關概念、原理、用法及操作注意事項,需要的朋友可以參考下
    2020-04-04
  • 詳解JavaScript?中的變量聲明與賦值

    詳解JavaScript?中的變量聲明與賦值

    在?JavaScript?中使用變量或常量之前,必須先進行聲明,這篇文章主要介紹了JavaScript中的變量聲明與賦值,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • javascript 補零 函數(shù)集合

    javascript 補零 函數(shù)集合

    有時候我們需要對日期不足兩位進行補零操作,或對一些數(shù)字不足多少位就補零。下面的函數(shù)就非常實用了,大家可以根據(jù)需要選擇。
    2009-03-03
  • JS實現(xiàn)的另類手風琴效果網頁內容切換代碼

    JS實現(xiàn)的另類手風琴效果網頁內容切換代碼

    這篇文章主要介紹了JS實現(xiàn)的另類手風琴效果網頁內容切換代碼,通過JavaScript響應鼠標事件動態(tài)操作頁面元素樣式屬性實現(xiàn)手風琴效果,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • JavaScript仿百度圖片瀏覽效果

    JavaScript仿百度圖片瀏覽效果

    這篇文章主要為大家詳細介紹了JavaScript仿百度圖片瀏覽效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11

最新評論

宣汉县| 马尔康县| 历史| 顺平县| 祁连县| 龙海市| 昭觉县| 清徐县| 阳城县| 浦县| 青岛市| 德昌县| 佛坪县| 克山县| 广汉市| 中牟县| 定结县| 乌鲁木齐县| 九江县| 兖州市| 利辛县| 绥芬河市| 东山县| 碌曲县| 定结县| 稻城县| 潜山县| 海门市| 石屏县| 巴南区| 常熟市| 嘉黎县| 土默特右旗| 安泽县| 栖霞市| 兴城市| 邵阳市| 时尚| 绍兴县| 邯郸县| 伊金霍洛旗|