前端怎么解決cors攻擊 Token流程是什么?怎么解決超時問題?
Token流程是什么?怎么解決超時問題?令牌驗證流程:1.背景介紹傳統(tǒng)身份驗證方法HTTP是一個無狀態(tài)協(xié)議,也就是說,它不 我不知道誰在訪問這個應(yīng)用程序。這里我們把用戶看成一個客戶端,客戶端使用用戶名
Token流程是什么?怎么解決超時問題?
令牌驗證流程:
1.背景介紹
傳統(tǒng)身份驗證方法
HTTP是一個無狀態(tài)協(xié)議,也就是說,它不 我不知道誰在訪問這個應(yīng)用程序。這里我們把用戶看成一個客戶端,客戶端使用用戶名和密碼認(rèn)證通過了,但是下一次這個客戶端發(fā)送請求的時候需要再次驗證。
解決方案是,當(dāng)用戶請求登錄時,如果沒有問題,我們會在服務(wù)器上生成一條記錄,可以說明登錄的用戶是誰,然后把這條記錄的ID號發(fā)送給客戶端。客戶端收到后,將這個ID號存儲在一個Cookie中,下次用戶向服務(wù)器發(fā)送請求時,可以隨身攜帶這個Cookie。這樣,服務(wù)器將驗證這個Cookie中的信息,看是否能在服務(wù)器上找到相應(yīng)的記錄。如果可以,說明用戶通過了認(rèn)證,然后將用戶請求的數(shù)據(jù)返回給客戶端。
以上是會話。我們需要在服務(wù)器上存儲為登錄用戶生成的會話。這些會話可以存儲在內(nèi)存、磁盤或數(shù)據(jù)庫中。我們可能需要定期清理服務(wù)器上的過期會話。
基于令牌的認(rèn)證方法
使用基于令牌的認(rèn)證方法,不需要存儲用戶 服務(wù)器上的登錄記錄。一般流程如下:
客戶端請求使用用戶名和密碼登錄。
服務(wù)器收到驗證用戶名和密碼的請求。
驗證成功后,服務(wù)器會頒發(fā)一個令牌并發(fā)送給客戶端。
收到令牌后,客戶端可以將其存儲在Cookie或LocalStorage中。
每次客戶端向服務(wù)器請求資源時,都需要攜帶服務(wù)器頒發(fā)的令牌。
服務(wù)器接收請求,然后驗證客戶端請求中攜帶的令牌,如果驗證成功,則向客戶端返回請求的數(shù)據(jù)。
傳統(tǒng)身份驗證方法
HTTP是一個無狀態(tài)協(xié)議,也就是說,它不 我不知道誰在訪問這個應(yīng)用程序。這里我們把用戶看成一個客戶端,客戶端使用用戶名和密碼認(rèn)證通過了,但是下一次這個客戶端發(fā)送請求的時候需要再次驗證。
解決方案是,當(dāng)用戶請求登錄時,如果沒有問題,我們會在服務(wù)器上生成一條記錄,可以說明登錄的用戶是誰,然后把這條記錄的ID號發(fā)送給客戶端??蛻舳耸盏胶髸⑦@個ID號存儲在一個Cookie中,下次用戶向服務(wù)器發(fā)送請求時可以帶上這個Cookie,這樣服務(wù)器就會驗證這個Cookie中的信息,看看在服務(wù)器上是否能找到對應(yīng)的記錄。如果有,如果有,服務(wù)器可以。數(shù)據(jù)被返回給客戶端。
以上是會話。我們需要在服務(wù)器上存儲為登錄用戶生成的會話。這些會話可以存儲在內(nèi)存、磁盤或數(shù)據(jù)庫中。我們可能需要定期清理服務(wù)器上的過期會話。
基于令牌的認(rèn)證方法
使用基于令牌的認(rèn)證方法,不需要存儲用戶 服務(wù)器上的登錄記錄。一般流程如下:
客戶端請求使用用戶名和密碼登錄。
服務(wù)器收到驗證用戶名和密碼的請求。
驗證成功后,服務(wù)器會頒發(fā)一個令牌,然后發(fā)送給客戶端。
收到令牌后,客戶端可以將其存儲在Cookie或LocalStorage中。
每次客戶端向服務(wù)器請求資源時,都需要攜帶服務(wù)器頒發(fā)的令牌。
服務(wù)器接收請求,然后驗證客戶端請求中的令牌,如果驗證成功,則向客戶端返回所請求數(shù)據(jù)切片的來源。
最早的Tiles是在Struts1.1中組裝的,主要目的是使用多個jsp頁面作為新頁面功能的一部分,然后將它們組合成一個最終的呈現(xiàn)頁面。通過這種,可以方便地更改和維護頁面的功能。
現(xiàn)在Tiles已經(jīng)作為Apache的一個獨立開源項目維護。
如果你發(fā)現(xiàn)自己在每個頁面上寫了三行相同的JSP代碼,或者如果你想輕松定義一個復(fù)雜的模板布局,那么我相信學(xué)習(xí)Tiles框架會對你有所幫助。
2.知識分析
傳統(tǒng)身份驗證方法
HTTP是一個無狀態(tài)協(xié)議,也就是說,它不 我不知道誰在訪問這個應(yīng)用程序。這里我們把用戶看成一個客戶端,客戶端使用用戶名和密碼認(rèn)證通過了,但是下一次這個客戶端發(fā)送請求的時候需要再次驗證。
解決方案是,當(dāng)用戶請求登錄時,如果沒有問題,我們會在服務(wù)器上生成一條記錄,可以說明登錄的用戶是誰,然后把這條記錄的ID號發(fā)送給客戶端??蛻舳耸盏胶螅瑢⑦@個ID號存儲在一個Cookie中,下次用戶向服務(wù)器發(fā)送請求時,可以隨身攜帶這個Cookie。這樣,服務(wù)器將驗證這個Cookie中的信息,看是否能在服務(wù)器上找到相應(yīng)的記錄。如果可以,說明用戶通過了認(rèn)證,然后將用戶請求的數(shù)據(jù)返回給客戶端。
以上是會話。我們需要在服務(wù)器上存儲為登錄用戶生成的會話。這些會話可以存儲在內(nèi)存、磁盤或數(shù)據(jù)庫中。我們可能需要定期清理服務(wù)器上的過期會話。
基于令牌的認(rèn)證方法
使用基于t的Oken 的認(rèn)證方法不需要存儲用戶 服務(wù)器上的登錄記錄。一般流程如下:
客戶端請求使用用戶名和密碼登錄。
服務(wù)器收到驗證用戶名和密碼的請求。
驗證成功后,服務(wù)器會頒發(fā)一個令牌,然后發(fā)送給客戶端。
收到令牌后,客戶端可以將其存儲在Cookie或LocalStorage中。
每次客戶端向服務(wù)器請求資源時,都需要攜帶服務(wù)器頒發(fā)的令牌。
服務(wù)器接收請求,然后驗證客戶端請求中攜帶的令牌,如果驗證成功,則向客戶端返回請求的數(shù)據(jù)。
傳統(tǒng)身份驗證方法
HTTP是一個無狀態(tài)協(xié)議,也就是說,它不 我不知道誰在訪問這個應(yīng)用程序。這里我們把用戶看成一個客戶端,客戶端使用用戶名和密碼認(rèn)證通過了,但是下一次這個客戶端發(fā)送請求的時候需要再次驗證。
解決方案是,當(dāng)用戶請求登錄時,如果沒有問題,我們會在服務(wù)器上生成一條記錄,可以說明登錄的用戶是誰,然后把這條記錄的ID號發(fā)送給客戶端。客戶端收到后,將這個ID號存儲在一個Cookie中,下次用戶向服務(wù)器發(fā)送請求時,可以隨身攜帶這個Cookie。這樣,服務(wù)器將驗證這個Cookie中的信息,看是否能在服務(wù)器上找到相應(yīng)的記錄。如果可以,說明用戶通過了認(rèn)證,然后將用戶請求的數(shù)據(jù)返回給客戶端。
以上是會話。我們需要在服務(wù)器上存儲為登錄用戶生成的會話。這些會話可以存儲在內(nèi)存、磁盤或數(shù)據(jù)庫中。我們可能需要定期清理服務(wù)器上的過期會話。
基于令牌的認(rèn)證方法
使用基于令牌的認(rèn)證方法,不需要存儲用戶 服務(wù)器上的登錄記錄。一般流程如下:
客戶端請求使用用戶名和密碼登錄。
服務(wù)器收到驗證用戶名和密碼的請求。
驗證成功后,服務(wù)器會頒發(fā)一個令牌,然后發(fā)送給客戶端。
收到令牌后,客戶端可以將其存儲在Cookie或LocalStorage中。
每次客戶端向服務(wù)器請求資源時,都需要攜帶服務(wù)器頒發(fā)的令牌。
服務(wù)器接收請求,然后驗證客戶端請求中攜帶的令牌,如果驗證成功,則向客戶端返回請求的數(shù)據(jù)。
3.常見問題
基于服務(wù)器的身份驗證方法暴露的一些問題
每次經(jīng)過身份驗證的用戶發(fā)出請求時,服務(wù)器都需要創(chuàng)建一個記錄來存儲信息。當(dāng)越來越多的用戶發(fā)送請求時,內(nèi)存的開銷也會增加。
2.可伸縮性:在服務(wù)器中使用Seesion在內(nèi)存中存儲登錄信息,伴隨而來的是可擴展性問題。
(跨域資源共享):當(dāng)我們需要跨多個移動設(shè)備使用數(shù)據(jù)時,跨域資源共享會是一件很頭疼的事情。當(dāng)使用Ajax從另一個域獲取資源時,可以禁止請求。
4.CSRF(跨站請求偽造):當(dāng)用戶訪問銀行網(wǎng)站時,很容易受到跨站請求偽造的攻擊,并可用于訪問其他網(wǎng)站。在這些問題中,可擴展行是最突出的。因此,我們有必要找到一種更有效的方法。
第四步:解決方案
基于令牌的認(rèn)證過程如下,:。
1.用戶通過用戶名和密碼發(fā)送請求。
2.程序驗證。
3.程序向客戶端返回一個簽名的令牌。
4.客戶端存儲令牌,并在每次發(fā)送請求時使用它。
5.服務(wù)器驗證令牌并返回數(shù)據(jù)。
令牌有一定的時間限制。到期后,您需要重新進行身份認(rèn)證才能登錄并獲得新令牌。
移動客戶端登錄服務(wù)器時,需要提供包含令牌的認(rèn)證,服務(wù)器需要向通道認(rèn)證包含令牌的認(rèn)證信息。如果通道返回有效,則移動客戶端被認(rèn)為是合法的。
在這個過程中,經(jīng)常會斷開連接,然后重新連接。每次重新連接過程相當(dāng)于登錄服務(wù)器一次,服務(wù)器會向通道服務(wù)器認(rèn)證令牌。但由于令牌的時效性,一段時間后斷開的重新連接會被拒絕。
一種解決方案是:每次斷開連接重新連接時,登錄服務(wù)器,申請新的令牌;;另一種是:當(dāng)服務(wù)器反饋是令牌已經(jīng)過期,那么通知客戶端再次從通道服務(wù)器獲取,然后斷開連接,重新連接新的令牌。相對于可能的頻繁獲取令牌,更傾向于第二種方法。從體驗來看,大部分代幣的時效都是按照小時來計算的。