Spring security 微服务体系结构中的SPA认证

Spring security 微服务体系结构中的SPA认证,spring-security,architecture,microservices,keycloak,spring-oauth2,Spring Security,Architecture,Microservices,Keycloak,Spring Oauth2,我正在寻找一种基于SpringBootMicroServices为我们的项目创建注册、身份验证和授权的最佳方法。微服务将为SPA应用程序提供rest API,随后为移动应用程序(android和ios)提供rest API。实际上,Postgres数据库中有所有用户 正如我提到的,用户注册和身份验证将由SPA和移动平台使用,因此我更喜欢RESTful API 我的想法是使用一个auth服务来解析auth*操作,并为其他微服务提供一个公钥来解码和验证JWT 事实上,我们不需要向外部服务提供授权,使

我正在寻找一种基于SpringBootMicroServices为我们的项目创建注册、身份验证和授权的最佳方法。微服务将为SPA应用程序提供rest API,随后为移动应用程序(android和ios)提供rest API。实际上,Postgres数据库中有所有用户

正如我提到的,用户注册和身份验证将由SPA和移动平台使用,因此我更喜欢RESTful API

我的想法是使用一个auth服务来解析auth*操作,并为其他微服务提供一个公钥来解码和验证JWT


事实上,我们不需要向外部服务提供授权,使用像KeyClope这样的OIDC提供程序有意义吗?或者自定义身份验证是更好的选择?

如果您想将Key斗篷提供的授权功能用于OIDC支持,则不必强制使用它。您可以从其注册、身份验证或忘记密码流以及易于配置的OAuth/OIDC功能中获益


KeyClope的另一个很好的特性是客户端的平滑集成,它允许您的代码几乎不做任何更改地工作。我没有评估过他们的Spring适配器,但在我参与的项目中,由于他们都是基于JEE的,并且使用了所有应用服务器提供的标准安全API,我们确实从应用服务器使用KeyClope适配器中受益匪浅。在请求到达我们的代码之前,它处理您在问题中描述的所有逻辑,这意味着一切都已经设置好(即,令牌已经得到验证/验证,主体和角色已经从中提取出来,我们可以通过
request.getPrincipal()
sessionContext.getCallerPrincipal()访问它)
request.isUserInRole()
,等等。)

无状态和基于标准的方式在我看来总是更安全的。“一个身份验证服务将解决身份验证*操作”`我怀疑为授权决策创建服务间依赖关系是否明智。每个服务可能都应该有自己的授权逻辑,因为这可能会变得非常复杂和服务意识。@Taylor也许我只是把它写得不好,sry为我的英语。我想要spring资源服务器配置,它可以用最少的自定义代码进行配置。它可以使用具有公钥rsa的端点,并自行解码和验证令牌。所以身份验证服务只提供这个端点,而不提供授权逻辑。啊,当你说
auth*
时,我假设你指的是身份验证和授权。我肯定会去OIDC内部。如果您需要为SSO支持SAML,那么可以很容易地从SAML进行外观调整。我自己也没用过Keyclope,但从我信任的人那里听到了一些好消息。只有其他的事情我鼓励你考虑的是一个服务,如Auth0或AWS认知。这取决于您的需要,但少托管/操作一件事情总是好的。您不需要通过外部服务(如Google或Facebook)来使用OIDC。在处理安全问题时,“自定义”从来都不是更好的选择。使用已证明安全的标准和服务,例如Azure B2C、AWS Cognito、Auth0。您可能应该将您的用户移动到这些服务中的一个,从而避免处理密码、hasing、satting等问题。