我認爲使用刷新標記對JavaScript應用程序不安全 - 您需要訪問/token
端點並使用應用程序的祕密進行身份驗證。但祕密在這些應用程序中公開。
我更喜歡OAuth2隱式流,並從/auth
端點獲取新標記,prompt=none
參數(來自OpenID Connect)。但是,對於隱式流程,您需要獲得更長的生命ID令牌(並在稍後請求帶有ID令牌的訪問令牌),或者在OAuth2上實現「記住我」(更好的選項 - 可以由任何應用)。這也可以通過在標籤之間傳遞令牌來解決問題2。
- 「會話」是指使用刷新令牌在30天內生成訪問令牌?如果這是一個問題,你可以實現一些活動檢測器,如果用戶沒有活動,它可以將用戶註銷。 30分鐘。
- 可以使用
localStorage
作爲一種消息傳遞服務,因此您可以將令牌保留在sessionStorage
中,但新標籤可以使用localStorage
從現有選項卡請求令牌。欲瞭解更多信息請參閱http://www.codediesel.com/javascript/sharing-messages-and-data-across-windows-using-localstorage/
從鏈接的文章
代碼示例:
function eventListener(e) {
if (e.key == 'storage-event') {
output.innerHTML = e.newValue;
}
}
function triggerEvent() {
localStorage.setItem('storage-event', this.value);
}
window.addEventListener("storage", eventListener, true);
data.addEventListener("keyup", triggerEvent, true);
的工作流程是這樣的:
- 新標籤打開,寫入任意值到localStorage的用一個表示它需要令牌的密鑰。密鑰可以是「newTabOpened」。新選項卡開始監聽另一個鍵「oauth2token」的更改。
- 現有標籤監聽「newTabOpened」鍵的變化,並將其標記值寫入「oauth2token」鍵下。
- 新選項卡讀取令牌並將其從localStorage中刪除。
我曾考慮過使用localStorage在窗口之間傳遞令牌,但這可能會導致無意中在localStorage中留下訪問/刷新標記。 – Pardoner
新標籤可以在讀取它們後從「localStorage」中刪除標記。 –
沒錯,但問題是你必須將它們放在localStorage中,以期打開新標籤。但如果一個新標籤從未打開,那麼他們就會坐下。 – Pardoner