【问题标题】:Spring microservices, stateless session, angular and static file servingSpring 微服务、无状态会话、角度和静态文件服务
【发布时间】:2017-02-12 15:47:18
【问题描述】:

我正在设计分为微服务的大型应用程序的后端。我正在使用 Spring Cloud 及其工具:EurekaZuul 等。我已经实现了 OAuth2 授权服务器,它支持四种授权类型。它可以正常工作。

然后我被要求提供 html 文件如果未经授权,后端必须重定向到登录页面,并强烈建议我不要使用会话 .我认为没有 session spring 不能真正知道发生了什么,最后 它必须有令牌来决定建立安全上下文

我开始研究这个问题。我发现来自Spring Security and Angular JS tutorial 的示例表明路由和重定向是在ui-route 的帮助下在angular 内部完成的。我浏览了 github 中的几个项目,它们也使用 angular 进行重定向。

是否可以在完全无状态的会话中使用后端进行重定向?(这听起来很愚蠢,但不能以其他方式表达。我想把这个答案告诉我的同事,他们说这是可能的)。如果可能的话,有什么例子吗?

【问题讨论】:

  • 您是否尝试过使用基于 JWT 令牌的身份验证?它是完全无状态的,我们在我从事的许多项目中都将它用于微服务架构中。

标签: angularjs spring-security spring-boot spring-cloud microservices


【解决方案1】:

如果您将 OAuth2 用于内部安全,我建议使用 oauth 来访问控制您的所有服务,将令牌的存在视为会话。

假设您在 4 种授权类型之一中生成了一些访问令牌。您现在可以访问任何ResourceServerConfigurerAdapter 安全的spring 云资源,方法是在Authorization: Bearer <token> HTTP 标头中传递该令牌,或者作为/service/endpoint?access_token=<token> 之类的get 参数。

如果您的令牌与用户相关(您可以在没有用户的情况下授权客户端!),您可以通过从 securityContext 获取 OAuth2Authentication 来访问其详细信息。

此外,如果您的访问令牌是 JWT(Spring Cloud Security 中默认支持该令牌),则您不必在授权服务器上提供真正的令牌存储,也不必从资源服务器请求身份验证服务器上的用户端点到获取用户信息,因为它在 JWT 中提供。

有了这个,关于“会话”(及其状态)的所有内容都存储在访问令牌中,您可以轻松地传递它,并且可以在没有复制混乱的情况下进行扩展。

我不认为你的安全性比这更无国籍;)

【讨论】:

    猜你喜欢
    • 2020-02-29
    • 2018-07-25
    • 2020-01-27
    • 1970-01-01
    • 2013-10-24
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多