我正在设计大型应用程序的后端,它被分成微服务。我正在使用 Spring Cloud 及其工具: Eureka , Zuul 等。我已经实施了 OAuth2 授权服务器支持四种授权类型。它没有问题。
然后我被要求以这样的方式提供 html文件和,如果未经授权,后端必须重定向到登录页面并强烈建议我不使用会话 。我认为没有会话春天真的不知道发生了什么,最后它必须有令牌才能决定构建安全上下文。
我开始研究这个问题。我发现来自Spring Security and Angular JS tutorial的示例显示路由和重定向是在 ui-route 的帮助下在 angular 内完成的。我在github中浏览了几个项目,他们也使用angular进行重定向。
是否有可能在完全无状态会话中使用后端重定向?(这听起来很愚蠢,但不能用其他方式表达。我想把这个答案给我的同事说明是可能的)。如果可能的话,有没有例子?
答案 0 :(得分:0)
如果您使用OAuth2进行内部安全,我建议使用oauth来访问控制所有服务,将令牌的存在视为会话。
考虑您在4种授权类型之一中生成了一些访问令牌。您现在可以通过在ResourceServerConfigurerAdapter
HTTP标头中传递该标记,或者像Authorization: Bearer <token>
这样的get参数来访问任何/service/endpoint?access_token=<token>
安全的Spring云资源。
如果您的令牌与用户相关(您可以授权没有用户的客户端!),您可以通过从securityContext获取OAuth2Authentication
来访问其详细信息。
此外,如果您的访问令牌是JWT(默认情况下在Spring云安全性中受支持),您既不必在授权服务器上提供真正的令牌存储,也不必在auth服务器上从资源服务器请求用户端点获取用户信息,因为它是在JWT内部发布的。
有了这个,关于你的“会话”(及其状态)的所有内容都存储在访问令牌中,你可以轻松地传递它,并且可以在没有复制混乱的情况下进行缩放。
我不认为你的安全性比这更无国籍;)