spring-security 在GCP Cloud Run上缩放Spring授权服务器

piok6c0g  于 2022-11-11  发布在  Spring
关注(0)|答案(2)|浏览(162)

我们在生产中遇到了一个问题,该问题似乎与我们重新启动开发盒并尝试使用由SSO Sping Boot 应用程序的上一个示例生成并由Spring Authorization Server提供支持的令牌进行身份验证时的问题相同。
错误为:随机数错误
在生产中,当我们的SSO应用程序由于用户高峰而扩展时,就会发生这种情况。我们可以看到,这种情况发生在用户活动量很大的时候,我们会不断地被注销。
现在,我们当然不希望仅仅因为添加了新的SSO示例,所有活动用户就突然拥有无效令牌。
这个问题也涉及到目前尚未得到解答,但更老的问题在这里:Can Spring Security OAuth2 Authorization Server scale horizontally?
请给出建议。这是我们目前在生产中遇到的最令人沮丧的问题,我们不太确定如何处理。我们没有使用任何类的内存实现。
2022年7月12日-更新:问题是“我们如何存储会话?”

  • 我们在MongoDb中存储OAuth2授权、授权同意和注册客户端。
  • 我们实现了OAuth2 AuthorizationService、OAuth2 AuthorizationConsentService和已注册的客户端存储库
fsi0uk1n

fsi0uk1n1#

Spring授权服务器构建于Spring Security之上(请参阅docs Overview),并且需要Spring Security的知识(请参阅获取帮助)。
特别是,您将需要回顾Spring Security文档的Authentication章节,会话管理福尔斯这个主题,如果您使用(例如)表单登录或类似的东西,您几乎肯定会希望将Spring Session添加到您的服务器以管理分布式会话。
如果您没有在数据库中管理会话,那么您也可能在客户端遇到问题,因此再次查看客户端的Spring Session将有助于缓解诸如您提到的nonce错误之类的问题。您还需要查看OAuth2客户端文档,并查看核心接口,因为您还需要在数据库中存储客户端授权。

ia2d9nvy

ia2d9nvy2#

史蒂夫已经在上面写了一个很好的回复,我把它标记为答案。
要回答此问题的标题:是的,SpringAuthorizationServer可以轻松地扩展到包含多个示例,而不会遇到我们所遇到的最初的错误配置问题。
Spring授权服务器没有任何神奇的工具来跨示例持久化会话。它依赖于正确配置的会话管理。我们使用MongoDb支持的Spring会话来实现我们的目的。
会话有效性最佳实践可能是应该解决的问题,以及其中一些最佳实践是否应该具有相同的超时值。

  1. Servlet会话超时
  2. Spring会话超时(如果存在,此值将覆盖1)
    1.记住我超时
    1.令牌超时
    我们仍在弄清楚/玩弄这些价值观应该是什么,并没有发现任何文件或文章,谈到一个最好的做事方式。

相关问题