【问题标题】:Spring Boot 2, Cloud Netflix and username/password authentication architectureSpring Boot 2、Cloud Netflix 和用户名/密码认证架构
【发布时间】:2020-07-23 14:08:22
【问题描述】:

这是一个架构问题。我想实现一个处理两种用户(管理员和客户端)的应用程序。每个角色可以通过以下方式注册:

  • admin:用户名/密码注册
  • 客户端:Facebook/Google/用户名和密码注册

根据用户的角色,他们每个人都有他有权执行的特定操作。

从技术堆栈来看,我想在 Docker 和 Kubernetes 上使用 Java 8、Spring Cloud Netflix 以及更高版本(以实现自动修复和自动扩展)。

我已经实现了 Eureka 发现、配置服务器、Zuul 网关,并且每个角色都有两个微服务(让我开始使用)。我根本不知道如何处理用户的身份验证/授权,从我看到的 Spring Security 5 不再支持授权服务器,我应该使用 Keycloack?网关应该是授权服务器还是应该创建另一个负责身份验证的组件?我使用什么,如何实现,如何处理我的授权服务器和业务微服务之间的重定向?

我真的找不到使用用户名/密码、社交登录和 Spring Cloud Netflix 以及 Spring Security 5 的合适文档。

【问题讨论】:

标签: spring-security spring-cloud keycloak spring-security-oauth2 spring-cloud-netflix


【解决方案1】:

您的网关不应负责处理身份验证。

一种可能性是使用 cas 项目。它可以作为微服务运行来处理整个身份验证过程。它可以处理多种身份验证方法,例如数据库(用于用户名/密码)和 Google 或 Facebook 等社交媒体。

它带有一个基本设置,有一个登录页面和一个配置的 DockerFile。您可以自定义所有内容。只需添加相关依赖并在application.properties中添加配置即可。您可以自定义前端。

https://apereo.github.io/cas/6.1.x/planning/Getting-Started.html

顺便说一句:如果您使用 kubernetes,则不需要使用 eureka 进行网关或服务发现。 Kubernetes 会为您做到这一点。

【讨论】:

  • 感谢您向我介绍 CAS。只有网关应该注册到 CAS 或每个微服务?在对不同服务的多次休息调用之间如何保存会话(我不希望用户登录任何使用不同服务的新请求)?
  • 我已经通过使用 jwt 解决了这个问题。登录后,cas 向我发送了一个令牌,该令牌存储在浏览器 localStorage 中。微服务使用 spring security 5 来检查令牌是否无效或过期。
  • 抱歉不在公共存储库中。如果答案有帮助,请考虑接受/支持。谢谢!
【解决方案2】:
  1. 为了 api 安全,迁移到 #Kubernetes 后,您可以使用 Envoy 或类似的解决方案
  2. 对于身份验证和授权,您需要一个身份管理系统(例如 #Okta 或 PingFederate 或开源版本,例如 #OpenIAM),然后使用 Spring 和 OAUTH2 进行集成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-23
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多