我在我的应用程序中使用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