JWT(JSON Web Token)用於在雙方之間安全地傳遞資料。它可以被用來表示用於身份驗證和資料交換的聲明。由於其緊湊和自包含的特性,特別適用於分佈式網站的場景,如單頁應用、身份驗證和跨域身份驗證。
JWT的主要用途:
JWT 由三部分組成,並由點 (.) 分隔:
當組合這三部分時,會得到一個由點分隔的字符串,如 aaaa.bbbb.cccc
。
範例:
eyJraWQiOiI5MTM2ZGRiMy1jYjBhLTRhMTktYTA3ZS1lYWRmNWE0NGM4YjUiLCJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJwb3J0c3dpZ2dlciIsImV4cCI6MTY0ODAzNzE2NCwibmFtZSI6IkNhcmxvcyBNb250b3lhIiwic3ViIjoiY2FybG9zIiwicm9sZSI6ImJsb2dfYXV0aG9yIiwiZW1haWwiOiJjYXJsb3NAY2FybG9zLW1vbnRveWEubmV0IiwiaWF0IjoxNTE2MjM5MDIyfQ.SYZBPIBg2CRjXAJ8vCER0LA_ENjII1JakvNQoP-Hw6GG1zfl4JyngsZReIfqRvIAEi5L4HV0q7_9qGhQZvy9ZdxEJbwTxRs_6Lb-fZTDpW6lKYNdMyjw45_alSCZ1fypsMWz_2mTpQzil0lOtps5Ei_z7mM7M8gCwe_AGpI53JxduQOaB5HkT5gVrv9cKu9CsW5MS6ZbqYXpGyOG5ehoxqm8DL5tFYaW3lB50ELxi0KsuTKEbD0t5BCl0aCR2MBJWAbN-xeLwEenaqBiwPVvKixYleeDQiBEIylFdNNIMviKRgXiYuAvMziVPbwSgkZVHeEdF5MQP1Oe2Spac-6IfA
伺服器通常不會儲存有關其釋出的JWT的任何資訊。 相反,每個都是一個完全獨立的實體。 這有幾個優點,但也引入了一個根本問題——伺服器實際上對令牌的原始內容一無所知,甚至不知道原始簽名是什麼。 因此,如果伺服器沒有正確驗證簽名,就無法阻止攻擊者對他的其餘部分進行任意更改。
JWT庫通常提供一種方法來驗證令牌
,另一種只是解碼它們
。 例如, Node.js libraryjsonwebtoken 具有verify()
和decode()
有時候,開發者會混淆這兩種方法,只將傳入的令牌傳遞給decode()
方法。 代表網站根本不會驗證簽名。