使用Spring在微服务中进行身份验证

时间:2019-03-11 16:25:59

标签: spring-boot authentication spring-security jwt microservices

我想重构一个整体的Spring Boot应用程序,基本上是一个具有登录功能的Web应用程序。我们已经有一个Security实现,该实现可以将会话ID存储为cookie,但是我对此几乎一无所知,并且对于该主题来说是全新的。由于独立的身份验证服务,JWT似乎是微服务的更好解决方案。

所以我的问题是:

  • 创建JWT身份验证服务并交换会话ID实现是否需要大量工作? (因为我是为我的学士学位论文而做的,所以有明确的截止日期)

  • 使用微服务时我可以保留会话ID吗?

  • 也许还有其他实现身份验证的方法吗?

2 个答案:

答案 0 :(得分:0)

  

创建JWT身份验证服务和交换是否需要大量工作   会话ID的实现? (因为我是为我的单身汉做的   论文并有明确的截止日期)

这个问题很难回答,因为它取决于您的特定实现的紧密程度。当然,这不是小事。

  

使用微服务时我可以保留会话ID吗?

是的,但是您需要弄清楚如何跨微服务联合会话(即,如何从一个服务到另一个服务获取会话中的信息)。总体而言,这表示服务之间存在紧密耦合的风险,因此我建议仅将此视为过渡步骤。

  

也许还有其他实现身份验证的方法?

一天多长。话虽这么说,但没有特别的理由,我通常会选择坚持到底。

答案 1 :(得分:0)

不建议在微服务中使用典型的用户会话。您应该使用无状态架构和令牌(存储在数据库或JWT中的令牌)。

最好使用Spring Boot OAuth2

您应该使用Spring Boot来实现授权服务器和资源服务器。

授权服务器:

  1. 选择令牌存储方法(JWT,Jdbc等)
  2. 配置客户详细信息
  3. 添加用于用户信息的RESTful Api或启用/ oauth / check_token api。(由资源服务器调用)

资源服务器:

  1. 在Spring boot OAuth2属性中设置user-info-uri或token-info-uri。
  2. 扩展render() { // Add this block to footer return ( <div style={{ display: "block", margin: "0 auto", verticalAlign: "middle" }} > <Button onClick={this.play} className="mr-3"> play() </Button> <Button onClick={this.pause} className="mr-3"> pause() </Button> <Button onClick={this.toggleFullScreen} className="mr-3"> FullScreen() </Button> </div> ); } 类以保护URL映射。