1. 程式人生 > >Json Token介紹(二)

Json Token介紹(二)

JSON Web令牌如何工作?

在身份驗證中,當用戶使用其憑據成功登入時,將返回JSON Web令牌。由於令牌是憑證,因此必須非常小心以防止出現安全問題。一般情況下,您不應該將令牌保留的時間超過要求。

每當使用者想要訪問受保護的路由或資源時,使用者代理應該使用承載模式傳送JWT,通常在Authorization標頭中。標題的內容應如下所示:

Authorization: Bearer <token>

在某些情況下,這可以是無狀態授權機制。伺服器的受保護路由將在Authorization標頭中檢查有效的JWT,如果存在,則允許使用者訪問受保護的資源。如果JWT包含必要的資料,則可以減少查詢資料庫以進行某些操作的需要,儘管可能並非總是如此。

如果在Authorization標頭中傳送令牌,則跨域資源共享(CORS)將不會成為問題,因為它不使用cookie。

下圖顯示瞭如何獲取JWT並用於訪問API或資源:

How does a JSON Web Token work

  1. 應用程式或客戶端向授權伺服器請求授權。這是通過其中一個不同的授權流程執行的。例如,典型的OpenID Connect相容Web應用程式將使用授權程式碼流通過/ oauth / authorize端點。
  2. 授予授權後,授權伺服器會嚮應用程式返回訪問令牌。
  3. 應用程式使用訪問令牌來訪問受保護資源(如API)。 

請注意,使用簽名令牌,令牌中包含的所有資訊都會向用戶或其他方公開,即使他們無法更改。這意味著您不應該在令牌中放置祕密資訊。

我們為什麼要使用JSON Web令牌?

讓我們來談談與簡單Web令牌(SWT)和安全斷言標記語言令牌(SAML)相比,JSON Web令牌(JWT)的好處。

由於JSON比XML簡潔,因此在編碼時它的大小也更小,使得JWT比SAML更緊湊。這使得JWT成為在HTML和HTTP環境中傳遞的不錯選擇。

在安全方面,SWT只能使用HMAC演算法通過共享金鑰對稱簽名。但是,JWT和SAML令牌可以使用X.509證書形式的公鑰/私鑰對進行簽名。與簽名JSON的簡單性相比,使用XML數字簽名對XML進行簽名而不會引入模糊的安全漏洞非常困難。

JSON解析器在大多數程式語言中很常見,因為它們直接對映到物件。相反,XML沒有自然的文件到物件對映。這使得使用JWT比使用SAML斷言更容易。

關於使用,JWT用於網際網路規模。這突出了在多個平臺(尤其是移動平臺)上輕鬆進行JSON Web令牌的客戶端處理。

Comparing the length of an encoded JWT and an encoded SAML

                                                                比較編碼的JWT和編碼的SAML的長度

如果您想了解有關JSON Web Tokens的更多資訊,甚至開始使用它們在您自己的應用程式中執行身份驗證,請瀏覽到Auth0上的JSON Web Token登入頁面。