2014-01-22 44 views
1

我已閱讀了有關令牌認證的一些內容,並且有一件事我不明白。我想如果用戶使用他的密碼登錄(通過https),我會生成一個隨機標記('md5(random + timestamp)'?)和過期日期並將其放入數據庫中。現在,在每個請求中(也通過https?),用戶可以發送令牌,並檢查數據庫中是否有具有該令牌的用戶並登錄該用戶。 現在我讀過一些標記包含用公鑰/私鑰算法加密的用戶名和時間戳。我不明白的是這個原因。我有我的數據庫中的令牌,並將其與用戶發送給我的令牌進行比較。如果他更改了令牌,我找不到具有該令牌的用戶,因此它是無效的令牌。我沒有看到爲什麼我必須以不同方式檢查令牌的有效性的原因?謝謝!爲什麼在驗證令牌中有數據?

+0

用戶名和時間戳不用於檢查用戶的身份,他們只是用來幫助確保生成唯一的令牌。 –

+0

但是爲什麼使用公鑰/私鑰加密它,而不僅僅是使用md5? – user2170547

回答

0

散列是不加密:Fundamental difference between Hashing and Encryption algorithms

,你需要不令牌存儲在服務器上。客戶端必須存儲它(本地/會話存儲),然後使用https重新發送。令牌的主體/有效負載具有類似userId,名稱或電子郵件甚至角色/權限的聲明。爲什麼需要此信息?因爲對於每個資源請求,您必須在服務器端確保允許客戶端通過檢查令牌中的聲明數據來執行當前操作。

您驗證了一些壞人(在https連接中受到攻擊的人)修改令牌的令牌的真實性。這可以通過簽署令牌來完成。看看JSON Web令牌:http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html