Spring 涉及不使用用户密码的安全自定义验证

Spring Security custom validation without using user password involved

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

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

OAuth2 听起来很熟悉,只是后端 API 需要 spring 保护,同时它不是 OAuth2 客户端:

  1. 我们正在构建登录功能。
  2. 我们有一个客户端(移动应用程序)、后端(类似于 REST 的端点 Spring MVC)和一个用于 OAuth2/OpenIdConnect 流的 AuthProvider。
  3. OAuth/OpenIDConnect 流程仅发生在移动设备和 OpenIDProvider 之间。 (从移动设备到后端发生初始调用以提供 oauth 流程的一些详细信息)
  4. 授权成功后,移动应用程序会收到一个auth_code,然后才从应用程序调用后端到"Login",这意味着验证auth_code,交换access_token,并创建用户会话。 (我们需要开个会)。
  5. 如您所见,后端类型 "login" 只需要接收 auth_code,并在创建会话之前使用 AuthProvider 对其进行验证。

非常感谢!

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

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

我推荐以下资源来了解如何进行此操作:

Spring 安全性通过查看 SecurityContextHolder 中的 SecurityContext 来确定用户是否已通过身份验证。这意味着您可以使用以下方式对用户进行身份验证:

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