Spring Security自定义验证,不涉及使用用户密码

时间:2017-07-19 16:56:18

标签: spring rest spring-security oauth-2.0 spring-security-oauth2

我想知道Spring Security是否可以锁定rest api的所有端点,并且可以通过自定义验证来进行登录,而无需使用用户名和密码。

这就像创建一个接收令牌而不是用户/传递的自定义验证方法。然后,该方法将使用已验证调用者的第三方验证令牌。

这听起来很熟悉OAuth2只是后端API需要在春天安全,同时它不是OAuth2客户端:

  1. 我们正在构建登录功能。
  2. 我们有一个客户端(移动应用),后端(像端点Spring MVC这样的REST),以及一个用于OAuth2 / OpenIdConnect流的AuthProvider。
  3. OAuth / OpenIDConnect流仅在移动和OpenIDProvider之间发生。 (初始呼叫从移动设备发送到后端以提供oauth流的一些细节)
  4. 授权成功后,移动应用程序会收到一个auth_code,然后只有后端从应用程序调用“登录”,这意味着验证auth_code,交换access_token,并创建用户会话。 (我们需要开会)。
  5. 当您看到后端需要仅接收auth_code的“登录”时,并在创建会话之前使用AuthProvider对其进行验证。
  6. 非常感谢!

    非常感谢任何评论或参考。

2 个答案:

答案 0 :(得分:1)

Spring Security 是一个非常灵活的框架,它发布了各种允许用户根据需要自定义行为的接口。

我建议您使用以下资源来了解如何解决此问题:

答案 1 :(得分:1)

Spring Security通过查看SecurityContext中的SecurityContextHolder来确定用户是否经过身份验证。这意味着您可以使用以下内容对用户进行身份验证:

boolean userIsAuthenticated = ...
if(userIsAuthenticated) {
    Authentication request = new UsernamePasswordAuthenticationToken(name, password);
    Authentication result = ...
    SecurityContext context = SecurityContextHolder.createEmptyContext();
    context.setAuthentication(result);
    SecurityContextHolder.setContext(context);
}