2017-10-11 108 views
0


基於JSON網絡令牌的服務器端的驗證流程

我想了解網絡令牌的概念(JSON網絡令牌是特定的)。然而,我無法找到關於如何在服務器上驗證令牌的任何信息。

A = CLIENT
B = SERVER

流量:

1)A - > B:客戶端發送的用戶名和密碼
2)B:服務器檢查它們對DB記錄,如果它們匹配創建;首先,使用簽名:base64UrlEncode(標題).base64Url(有效載荷),#祕密#然後令牌使用:signature.payload.secret
3)< - B:服務器發送回令牌客戶
4)甲 - > B:客戶端發送請求與令牌來訪問某些網址在頭
5)B:服務器解碼頭和有效負載,使用#祕密#創建另一個數字簽名,並將其與什麼被派去確保完整性
比較

如果上面的流程是正確的,它會引起以下問題:

1)是否有SSL纏繞它?如果不是任何人都可以劫持令牌並將其發送給服務器和用戶模擬客戶端
2)在步驟5中,只檢查完整性,從令牌解密的有效負載數據不會根據數據庫驗證(例如用戶名),如果它被驗證,或者一旦完整性得到確認,我們可以肯定令牌是有效的,應用程序可以授予客戶端訪問權限?
3)是#祕密#只有服務器已知並且僅用於驗證有效負載未被篡改?我會這樣認爲,否則用戶冒充可能會發生。

回答

0

您描述的流程是正確的。你實際上已經回答了你自己的問題。

1)是否有SSL纏繞它?如果沒有人可以劫持令牌並將其發送給服務器和用戶冒充客戶端

是的,它是,令牌必須被保護,因爲是驗證證明。它應該只被互換槽一個SSL/TLS連接

2)在步驟5中,僅存在完整性檢查,從令牌解密的有效載荷數據不是針對DB驗證(例如用戶名),應驗證或者一旦完整性得到確認,我們可以確定令牌是有效的,並且應用程序可以授予客戶端的訪問權限?

令牌用服務器的密鑰簽名,所以服務器會檢測到任何變更,令牌會被拒絕。如果驗證成功,您可以安全地使用有效載荷。

3)是否#祕密#只有服務器已知並且僅用於驗證有效負載未被篡改?我假設是這樣的,否則用戶冒充可能發生

是的,密鑰必須是「祕密」。如果你使用對稱的HMAC密鑰,它用來創建和驗證令牌,所以如果你分享它,任何人都會創建令牌

+0

完美的,謝謝你的確認。 – Pawel