【问题标题】:Spring Boot REST service – End User Authentication vs APP (REST client) AuthenticationSpring Boot REST 服务 – 最终用户身份验证与 APP(REST 客户端)身份验证
【发布时间】:2019-07-30 19:29:37
【问题描述】:

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

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

解决方案: 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) 同时处理以下几点。

我。客户端应用程序和最终用户身份验证。
二、允许匿名用户和注册用户访问同一端点。

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

谢谢

【问题讨论】:

    标签: spring-boot spring-security amazon-cognito spring-security-oauth2 spring-rest


    【解决方案1】:

    我在将 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-31
      • 1970-01-01
      • 2012-05-30
      • 1970-01-01
      • 1970-01-01
      • 2021-06-05
      • 2014-12-25
      • 2015-06-20
      相关资源
      最近更新 更多