我一直在研究使用SpringBoot和一些netflix库(例如Eureka,Zuul,Ribbon)开发微服务架构;但是,我似乎对安全设计感到厌烦。
我的目标是使用第三方网络服务,例如Okta.com来管理我的所有用户和应用程序。 Okta使用Oauth2,我相信这会使我的应用程序处于有状态。我的目标是使我的应用程序保持无状态以实现负载平衡。
我将使用以下服务模块架构,
Gateway Service
Auth Service (Authenticate against Okta)
Microservice 1 (role_admin, role_sales)
Microservice 2 (role_admin, role_employee)
我的理解是,当网关请求路由到微服务1或微服务2时,令牌需要与请求一起转发,如果不存在令牌,则需要向网关处的Auth Service发送请求以便使用Oauth2从Okta获得令牌。
我的下一个理解是在使用oauth2时,当令牌存在并且已被转发到微服务1或微服务2时,令牌将需要再次针对okta进行验证。这些组将包含在令牌中。
我的问题是Okta是否可以仅用于身份验证和授权,而不是传递Okta生成的有状态的oauth2令牌,而是创建一个包含角色和用户信息的无状态JWT,并将其传递回微服务?
我只是想知道如何在微服务体系结构中使用像Okta这样的服务,但是仍然让我的微服务保持无状态,而且我不确定我的思维过程是否正确。