我在我的應用程序中使用AWS Cognito來驗證用戶身份。 AWS爲我們提供了JWT令牌。我的問題是,我們是否需要使用express-session來處理會話管理,或者AWS Cognito提供的JWT令牌是否會爲經過身份驗證的用戶管理會話管理。通過Express-Session使用AWS Cognito進行會話管理
回答
當您使用Cognito JWT令牌時,不需要顯式的會話處理程序。
您可以將JWT令牌發送到客戶端並將其存儲在Web瀏覽器(本地存儲,會話存儲或Cookie)中,該瀏覽器提供狀態的持久性(Acts作爲會話,並且對令牌持續時間有效)。
對於所有後續請求,您需要將授權標題中的JWT發送回您的快遞服務器。
如果您的API被除瀏覽器之外的其他客戶端使用,例如移動應用程序可以實現統一的狀態管理,那麼這將比會話有優勢。
爲了最大限度地降低需要高安全性的應用程序在LocalStorage中存儲id令牌的風險,請將令牌持續時間縮短並使用刷新令牌生成新令牌。
注意:如果您使用Cognito Hosted UI,則需要使用Cognito Autorization代碼授權流來獲取刷新令牌。
我認爲將JWT暴露給Web瀏覽器並將其用於會話是非常危險的,因爲它會打開會話劫持的內容。我建議不要混淆認證和會話管理。 – galaxy
@galaxy這是一個永無止境的話題,它基本上會增加主觀意見。在回答之前,我已經完成了檢查。我可以向你提供兩個不同的參考資料(閱讀超過25+),這些參考資料反映了我提供的答案。朝 - https://auth0.com/blog/cookies-vs-tokens-definitive-guide/和反對 - http://cryto.net/~joepie91/blog/2016/06/13/stop-using-jwt-換會話/。我必須評估一個企業客戶的方法,所以我也向這個主題諮詢過安全專家。如果您需要,我可以分享更多信息。查看更新的答案以獲取更多詳細信息 – Ashan
您的第二個鏈接實際上是唯一一個關於該主題的鏈接,並且由實際理解*身份驗證*和會話維護之間區別的人編寫。 Auth0的一個很奇怪,他們認證過程與會話管理混淆,所有問題都來自於混淆。一個會話並不關心你是否被認證 - 它只是應該繼續定義的狀態(你實際上可以存儲一個實體被認證的屬性)。 – galaxy
- 1. AWS Cognito管理控制
- 2. 使用設備進行會話管理
- 3. 使用keycloak進行會話管理
- 4. 使用Alamofire進行會話管理
- 5. 使用Firebase進行會話管理?
- 6. Spring WS UsernameToken認證+通過spring-boot進行會話管理
- 7. 通過將數據存儲在sessionstorage中進行會話管理
- 8. AWS Cognito強制刷新會話
- 9. AWS Cognito檢查和恢復會話(iOS)
- 10. 通過Python管理AWS
- 11. 會話管理通過純CGI
- 12. 使用過濾器的會話管理
- 13. AWS Cognito使用Express
- 14. AWS上的memcached會話管理器
- 15. 使用AWS Cognito和API網關的細粒度訪問管理
- 16. 使用外部存儲進行Vert.x會話管理
- 17. 使用Oracle 10g數據庫進行ASP.NET會話管理
- 18. 使用Httpservice的Flex + Java Servlet進行會話管理
- 19. 使用Redis進行春季會話管理
- 20. 如何使用RackSpace Cloud進行會話管理?
- 21. 使用Tomcat和cookies進行會話管理
- 22. 使用Autofac在NServiceBus中進行NHibernate會話管理
- 23. 在REST中使用REST進行會話管理
- 24. 如何使用Perl進行身份驗證和會話管理?
- 25. 使用Apache CXF進行身份驗證和會話管理DOSGi
- 26. 使用PHP進行會話處理Mysql
- 27. 使用Recess進行會話處理!
- 28. 使用AWS Elasticache Redis管理Sails.js中的會話
- 29. 使用AWS會話令牌的S3的Cloudberry資源管理器
- 30. 會話管理
您對「認證用戶的會話管理」是什麼意思?您是否想臨時緩存身份驗證身份以加速後續請求?或者你指的是有狀態的jwt? – Asanka