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

时间:2019-11-21 04:00:09

标签: spring-boot authentication oauth oauth-2.0 aws-api-gateway

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

我曾考虑过使用OAuth,但这可能意味着我们要避免将客户端机密,客户端ID暴露给浏览器。

此外,我们的应用程序是旧版网络应用程序,它使用简单的表单身份验证,因此我们不打算为此要求对其进行更改。因此,我们无法选择将OAuth与我们的登录过程集成在一起,也不能出于我们的目的使用登录用户令牌。

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

3 个答案:

答案 0 :(得分:2)

您已经意识到您的方案中的基本安全问题-客户端应用程序在连接到外部安全服务时将公开秘密。当前,尚没有策略性方法可以在公共域(用户的浏览器)中对私有服务进行安全身份验证。

您的选择如下:

  • 在旧版Webapp中实现安全委托端点,以调用对数据的安全请求,该请求充当AWS API网关的委托。客户端UI->服务器端应用程序终端节点-> AWS API网关

  • 在同一应用程序服务器基础结构上一起部署旧版Web应用程序和新的Rest应用程序,从而它们共享经过身份验证的会话

答案 1 :(得分:2)

我的首选是上面的Dominic的选项1,以获取新组件-REST API-面向未来:

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

  • Web后端需要将令牌发送到API-以及用于标识最终用户的附加参数

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

Cognito是一个新的组件,可用于理解和管理-因此要取决于它是否适合您公司的长期战略。

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

答案 2 :(得分:0)

如果您已经具有基于表单的登录名,则可以将基于basic authentication的相同用户名密码用于其余端点。请参阅下面的示例进行配置

@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");
    }
}