Spring boot 公开的REST端点的身份验证
我正在创建一个面向公众的REST服务(在AWS API网关后面),可以通过浏览器从我们的web应用程序访问。该服务将接受和处理敏感的用户数据,因此我们需要在端点上进行身份验证 我考虑过使用OAuth,但这可能意味着向浏览器公开客户机机密、客户机Id,这是我们想要避免的 此外,我们的是一个使用简单表单身份验证的遗留web应用程序,我们不打算为此要求对其进行更改。因此,我们没有将OAuth与登录过程集成并使用登录用户令牌的选项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端点使用相同的用户名和密码。请参阅下面的示例以进行配置
@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应用程序,从而共享经过身份验证的会话
- Web后端使用客户端凭据授权从Cognito获取访问令牌
- Web后端需要将令牌和一个附加参数一起发送到API,以标识最终用户
- API安全模型用于验证Cognito访问令牌并识别用户
如果您决定采用这种方法,我可以就技术集成提供建议。我更喜欢Dominic上面的选项1,以获得新组件—REST API—面向未来:
- Web后端使用客户端凭据授权从Cognito获取访问令牌
- Web后端需要将令牌和一个附加参数一起发送到API,以标识最终用户
- API安全模型用于验证Cognito访问令牌并识别用户