Spring 引导 REST 服务——最终用户身份验证与 APP(REST 客户端)身份验证

Spring Boot REST service – End User Authentication vs APP (REST client) Authentication

我浏览了很多帖子和文章,但没有找到针对下面我必须实施的案例的直接解决方案。

平台:Spring引导2.x.x(Spring安全5.x.x)嵌入Tomcat

解决方案: REST 服务消耗许多客户端应用程序和许多最终用户。

  1. 我必须实现一个可供许多客户端应用程序访问的 REST 端点 /api/search。例如,Web 应用程序 APP-X (Angular)、Web 应用程序 APP-Y(Jquery/Bootstrap) 和移动应用程序 APP-Z (IOS)。所有三个客户都是独立的实体(技术角度和业务角度)。

  2. 所以我必须使用一次性令牌对上述应用程序进行身份验证。因此,我计划通过启用 @EnableAuthorizationServer@EnableResourceServer 来实现 Spring OAuth2。我将为每个应用程序客户端生成一个令牌,他们可以在连接到我的 REST 服务时使用它。 这个方法正确吗?

  3. 除了应用程序客户端系统之外,系统还具有为最终用户注册和登录的功能。此外,我的端点 (/api/search) 可以访问匿名用户和在 ROLE_REGUSER 角色下注册的用户。通过安全上下文,我需要像通常的用户身份验证一样访问用户详细信息。

  4. 这是我卡住的地方。如何使用 Spring Security 5.x.x (Spring Boot 2.x.x).

  5. 一起处理以下几点

I. Both client apps and end users authentications.
II. Allow access for anonymous users and registered users for same end point.

我已附上小图来详细说明上述情况。

谢谢

我在将 spring 安全版本升级到 5.2 时找到了解决方案。
在 5.2 版本中,它们已贬值 @EnableAuthorizationServer@EnableResourceServer。所以我不得不转向支持 auth2 的外部授权提供商。我选择了 AWS Cognito,并使用用户池选项满足上述要求。

In AWS Cognito

  1. 我创建了一个用户池。
  2. 然后在同一个用户池中创建了两个应用程序客户端。
  3. 一个应用程序客户端配置为支持客户端凭据流。
  4. 配置为支持用户身份验证流程的第二个应用程序客户端。

In client applications

  1. 使用客户端凭证直接从 AWS Cognito 检索访问令牌并用于保护所有 API 调用。
  2. 如果用户在任何阶段登录,使用授权代码直接从 AWS Cognito 检索访问令牌并替换任何现有的访问令牌。

The advantage is, the resources server can validate any access token that generated related to the same user pool.

In resources server (backend API/Spring Boot)

  1. Validate access token.