2017-04-10 56 views
0

例如,假設我想確定一個用戶是否仍然「登錄」...他們的令牌還沒有過期。JavaScript應用程序應如何驗證由IdentityServer4發出的access_token?

當我第一次發佈access_token時,我在localStorage中存儲了我的JWT access_token。我知道僅僅檢查localStorage來查看access_token是否存在是不夠的。我讀了關於自省的結束點,但這似乎是API的 - 而不是JS客戶端。使用客戶端庫進行JWT驗證是最佳方法嗎?我不喜歡這個,因爲我有可能需要切換到引用令牌。我想打電話給服務器端。

使用JavaScript客戶端驗證access_token的正確方法是什麼?

更新: 經進一步調查,並與來自leastprivilege意見,我將使用OIDC JavaScript client所以我並不需要擔心這個。

回答

2

客戶端應用程序不應該「解碼」訪問令牌。確切的格式是發行者和API之間的實現細節。

當請求訪問令牌時,令牌響應包含一個'expires_in'參數,告訴客戶端令牌有效的秒數。

+0

因此,如果我使用JavaScript構建UI,並且需要在每個視圖加載之前確定是否需要新的令牌(並且因此用戶需要被重定向到登錄頁面),我可以檢查'expires_in'或如果有一種前端處理程序會在我的API返回401時將用戶重定向到登錄頁面,會更好嗎?當然,這肯定是一種常見的情況 –

+1

使用像https://github.com/IdentityModel/oidc-client-js這樣的庫,它會爲您進行生命週期監控並在後臺處理續訂。另請參閱https://vimeo.com/205451987 – leastprivilege

+0

僅供參考 - 在我決定使用OIDC Js客戶端之前,我正在關注客戶端應用程序的這個示例。 https://github.com/IdentityServer/IdentityServer3.Samples/blob/master/source/Clients/JavaScriptImplicitClient%20Manual/index.html#L144 –

1

大多數jwt令牌都帶有過期時間字段(取決於服務器)。您可以使用類似this的庫來解碼JWT令牌,然後將其保存到本地存儲中,然後使用令牌保存到期時間,以便您可以檢查本地存儲和到期時間,以及當前日期是否大於到期時間,您放棄以前的令牌並獲得一個新的令牌。

相關問題