【发布时间】:2021-02-10 21:59:13
【问题描述】:
我正在寻找一种基于 Spring Boot 微服务为我们的项目创建注册、身份验证和授权的最佳方法。微服务将为 SPA 应用程序提供 REST API,稍后为移动应用程序(android 和 ios)提供。实际上,我们在 Postgres 数据库中拥有所有用户。
正如我提到的,SPA 和移动平台将使用用户注册和身份验证,因此我更喜欢 RESTful API。
我的想法是拥有一个 auth-service 来解析 auth* 操作,并为其他微服务提供一个公钥来解码和验证 JWT。
事实上,我们不需要向外部服务提供授权,使用像 Keycloak 这样的 OIDC 提供程序是否有意义?还是自定义身份验证是更好的选择?
【问题讨论】:
-
无状态和基于标准的 imo 总是更安全。 ` 一个将解决 auth* 操作的 auth-service` 我会质疑为授权决策创建服务间依赖关系是否明智。每个服务可能都应该拥有自己的授权逻辑,因为这可能会变得非常复杂和服务感知。
-
@Taylor 也许我写得不好,对不起我的英语。我想要spring资源服务器配置,可以用最少的自定义代码进行配置。它可以使用公共 rsa 密钥消费端点,并自行解码和验证令牌。所以身份验证服务将只提供这个端点,而不是授权逻辑。
-
啊,我以为你说
auth*是指身份验证和授权。我肯定会去 OIDC 内部。如果您需要为 SSO 提供支持,很容易从 SAML 进行外观调整。我自己没有使用过 Keycloak,但从我信任的人那里听到了好话。我鼓励您考虑的唯一另一件事是像 Auth0 或 AWS cognito 这样的服务。取决于您的需求,但托管/操作少一件总是好的。 -
您无需对外部服务(如 Google 或 Facebook)进行身份验证即可使用 OIDC。虽然处理安全“自定义”从来都不是更好的选择。使用已被证明是安全的标准和服务,例如Azure B2C、AWS Cognito、Auth0。您可能应该将您的用户转移到这些服务之一,并让自己免于处理密码、hasing、salting 等。
标签: spring-security architecture microservices keycloak spring-oauth2