微服务架构中SPA的认证

3
我正在寻找一种最佳方法来基于Spring Boot微服务创建项目的注册,身份验证和授权。微服务将为SPA应用程序提供REST API,以后也将为移动应用程序(Android和iOS)提供。实际上,我们在Postgres数据库中拥有所有用户。
正如我所说,用户注册和身份验证将由SPA和移动平台使用,因此我更喜欢使用RESTful API。
我的想法是拥有一个身份验证服务,它将解决身份验证操作,并为其他微服务提供公共密钥以解码和验证JWT。
事实上,我们不需要为外部服务提供授权,那么使用OIDC提供程序(如Keycloak)是否有意义?或者自定义身份验证是更好的选择?

无状态和基于标准的总体而言更安全。一个授权服务将解决授权*操作,我会质疑是否明智地为授权决策创建跨服务依赖关系。每个服务可能都应该拥有自己的授权逻辑,因为这可能变得相当复杂且具有服务感知性。 - Taylor
@Taylor 可能是我写得不好,对我的英语感到抱歉。我想要 Spring 资源服务器配置,可以通过最小的自定义代码进行配置。它可以使用公共 RSA 密钥消耗端点,并独立解码和验证令牌。因此,认证服务将仅提供此端点,而不是授权逻辑。 - Denis Stephanov
啊,我以为你说的 auth* 是指身份验证和授权。我肯定会选择 OIDC 内部。如果您需要支持 SSO,它很容易从 SAML 进行外观适应。我自己没有使用过 Keycloak,但是我听到了一些我信任的人的好评。我唯一鼓励您考虑的其他事情是像 Auth0 或 AWS Cognito 这样的服务。这取决于您的需求,但是少运营/托管一件事总是不错的。 - Taylor
您不需要授权才能使用 OIDC,如 Google 或 Facebook 等外部服务。在处理安全性方面,“自定义”从未是更好的选择。请使用已被证明为安全的标准和服务,例如 Azure B2C、AWS Cognito、Auth0 等。您应该将用户迁移到这些服务之一,并避免处理密码、哈希、盐等。 - Maxime Gélinas
1个回答

1
您不必强制使用Keycloak提供的授权功能,如果您想使用它进行OIDC支持。您还可以从其注册、认证或忘记密码流程中受益,以及易于配置的OAuth/OIDC功能。
Keycloak的另一个好处是在客户端方面的平滑集成,这使得您的代码几乎不需要更改。我没有评估过他们的Spring适配器,但在我参与的项目中,由于它们都基于JEE,并且使用所有应用程序服务器提供的标准安全API,我们确实从使用Keycloak适配器为我们的应用程序服务器中受益。它处理了您在问题中描述的所有逻辑,在请求到达我们的代码之前,这意味着一切都已经设置好了(即令牌已被验证/验证,并且主体和角色已从中提取出来,我们只需通过request.getPrincipal()sessionContext.getCallerPrincipal()request.isUserInRole()等访问即可)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接