Spring boot 公开的REST端点的身份验证

Spring boot 公开的REST端点的身份验证,spring-boot,authentication,oauth,oauth-2.0,aws-api-gateway,Spring Boot,Authentication,Oauth,Oauth 2.0,Aws Api Gateway,我正在创建一个面向公众的REST服务(在AWS API网关后面),可以通过浏览器从我们的web应用程序访问。该服务将接受和处理敏感的用户数据,因此我们需要在端点上进行身份验证 我考虑过使用OAuth,但这可能意味着向浏览器公开客户机机密、客户机Id,这是我们想要避免的 此外,我们的是一个使用简单表单身份验证的遗留web应用程序,我们不打算为此要求对其进行更改。因此,我们没有将OAuth与登录过程集成并使用登录用户令牌的选项 在这种情况下,是否有人可以建议验证服务的好方法。如果您已经有了基于表单的

我正在创建一个面向公众的REST服务(在AWS API网关后面),可以通过浏览器从我们的web应用程序访问。该服务将接受和处理敏感的用户数据,因此我们需要在端点上进行身份验证

我考虑过使用OAuth,但这可能意味着向浏览器公开客户机机密、客户机Id,这是我们想要避免的

此外,我们的是一个使用简单表单身份验证的遗留web应用程序,我们不打算为此要求对其进行更改。因此,我们没有将OAuth与登录过程集成并使用登录用户令牌的选项


在这种情况下,是否有人可以建议验证服务的好方法。

如果您已经有了基于表单的登录,您可以为您的rest端点使用相同的用户名和密码。请参阅下面的示例以进行配置

@Configuration
@EnableWebSecurity
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity httpSecurity) throws Exception
    {
        httpSecurity.authorizeRequests().anyRequest().authenticated();
        httpSecurity.formLogin().loginPage("/login").permitAll();
        httpSecurity.logout().logoutSuccessUrl("/logout").logoutSuccessUrl("/logout-success");
    }
}

如果您已经有了基于表单的登录,那么可以对rest端点使用相同的基于用户名和密码的登录。请参阅下面的示例以进行配置

@Configuration
@EnableWebSecurity
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity httpSecurity) throws Exception
    {
        httpSecurity.authorizeRequests().anyRequest().authenticated();
        httpSecurity.formLogin().loginPage("/login").permitAll();
        httpSecurity.logout().logoutSuccessUrl("/logout").logoutSuccessUrl("/logout-success");
    }
}

您已经意识到场景中的基本安全问题-客户端应用程序在连接到外部安全服务时会暴露机密。目前还没有一种战略性的方法可以在公共域(用户的浏览器)中安全地对私有服务进行身份验证

你的选择如下:

  • 在遗留webapp中实现一个安全委托端点,以调用数据的安全请求,该请求充当AWS API网关的委托。客户端用户界面->服务器端应用程序端点->AWS API网关

  • 在同一应用程序服务器基础结构上同时部署旧的webapp和新的rest应用程序,从而共享经过身份验证的会话


您已经意识到场景中的基本安全问题-客户端应用程序在连接到外部安全服务时会暴露机密。目前还没有一种战略性的方法可以在公共域(用户的浏览器)中安全地对私有服务进行身份验证

你的选择如下:

  • 在遗留webapp中实现一个安全委托端点,以调用数据的安全请求,该请求充当AWS API网关的委托。客户端用户界面->服务器端应用程序端点->AWS API网关

  • 在同一应用程序服务器基础结构上同时部署旧的webapp和新的rest应用程序,从而共享经过身份验证的会话


我更喜欢上面多米尼克的选项1,以获得新组件——REST API——面向未来:

  • Web后端使用客户端凭据授权从Cognito获取访问令牌

  • Web后端需要将令牌和一个附加参数一起发送到API,以标识最终用户

  • API安全模型用于验证Cognito访问令牌并识别用户

Cognito是一个需要理解和照顾的新组件,所以这取决于它是否符合您公司的长期战略


如果您决定采用这种方法,我可以就技术集成提供建议。

我更喜欢Dominic上面的选项1,以获得新组件—REST API—面向未来:

  • Web后端使用客户端凭据授权从Cognito获取访问令牌

  • Web后端需要将令牌和一个附加参数一起发送到API,以标识最终用户

  • API安全模型用于验证Cognito访问令牌并识别用户

Cognito是一个需要理解和照顾的新组件,所以这取决于它是否符合您公司的长期战略

如果您决定采用这种方法,您可以就技术集成提供建议