首页 文章

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

提问于
浏览
0

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

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

对于OAuth2来说,这听起来很熟悉,因为后端API需要在 Spring 天安全,同时它不是OAuth2客户端:

  • 我们正在构建登录功能 .

  • 我们有一个客户端(移动应用程序),后端(像 endpoints Spring MVC这样的REST),以及一个用于OAuth2 / OpenIdConnect流的AuthProvider .

  • OAuth / OpenIDConnect流仅在移动和OpenIDProvider之间发生 . (初始呼叫从移动设备发送到后端以提供oauth流的一些详细信息)

  • 一旦授权成功,移动应用程序就会收到一个auth_code,然后才会从应用程序调用后端到"Login",这意味着验证auth_code,交换access_token,并创建用户会话 . (我们需要一个 Session ) .

  • 正如您所看到的那样,"login"只需要接收auth_code,并在创建会话之前使用AuthProvider对其进行验证 .

非常感谢你!

任何评论或参考都非常感谢 .

2 回答

  • 1

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

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

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

    我建议使用以下资源来学习如何解决这个问题:

相关问题