Spring Boot REST服务–最终用户身份验证与APP(REST客户端)身份验证

问题描述 投票:2回答:1

我浏览了许多文章和文章,但没有找到针对我必须实施的简单解决方案。

平台:带有嵌入式Tomcat的Spring Boot 2.x.x(Spring Security 5.x.x)

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

  1. 我必须实现一个REST端点/api/search,许多客户端应用程序都可以访问该端点。例如,Web应用程序APP-X(角度),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)一起处理以下几点。

I。客户端应用程序和最终用户身份验证。二。允许anonymous用户和注册用户使用同一端点。

我已附上一张小图以详细说明上述情况。

谢谢

enter image description here

java amazon-cognito spring-security-oauth2 spring-rest
1个回答
0
投票

当我将Spring Security版本升级到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检索访问令牌并替换任何现有的访问令牌。

优点是,资源服务器可以验证生成的与同一用户池相关的任何访问令牌。

In resources server (backend API/Spring Boot)

  1. Validate access token
© www.soinside.com 2019 - 2024. All rights reserved.