我正在通過HTTPS在Node.js應用上創建REST服務。我不想讓任何人使用這些REST服務,除非他們是經過身份驗證的用戶,所以在向這些服務提出請求時我需要一種身份驗證方法。Node.js RESTFUL服務自建認證
我在網上看過,看起來OAuth2與護照是一個很好的解決方案...然而,我想出了我認爲是一個更簡單的解決方案,不需要持久性的令牌,我想知道,是否有我的解決方案有任何大的漏洞嗎?
我的解決方案是保持存儲在服務器上的祕密。當用戶登錄並驗證它們(或註冊)時,我散列用戶名,爲其添加時間戳,並用我的密碼對其進行編碼以創建「訪問令牌」。由於時間戳,此令牌將在一小時後(或一天或不管多久...)過期。
一旦用戶擁有此訪問令牌,他們只需將請求查詢中的此令牌及其用戶名一起傳遞,並且他們將能夠使用服務器的REST API。鑑於當我用我的服務器密碼解碼令牌時,它等於用戶名。
此方法也不要求我堅持任何令牌信息(刷新令牌,到期時間等)。我也不需要額外的模塊,如護照和oauth模塊來實現我的解決方案,它看起來非常緊湊。
我的問題是(我對安全性非常陌生),假設服務器的祕密永遠不會被發現,這個解決方案是否足以滿足爲移動應用程序提供服務的服務器的需求(通過REST客戶端仍然可以訪問)?
嗨!偉大的迴應,我結束了使用jwt-simple創建令牌並根據我的服務器祕密對此令牌進行解碼!我並不擔心瀏覽器緩存令牌,因爲這些令牌每小時都會過期。另外,我通過HTTPS連接提供所有這些信息(這不會阻止MITM攻擊嗎?) 如果沒有,我肯定會考慮將這些令牌存儲在安全的cookie中(如上所述)。 – user3594827
我對緩存的評論更多的是關於後端服務器緩存或代理緩存。許多系統還記錄URLS(例如監控和分析系統),因此您也可以將令牌暴露給這些系統。 – robertjd