没有弹簧安全性的 ldap 和 JWT 身份验证
Posted
技术标签:
【中文标题】没有弹簧安全性的 ldap 和 JWT 身份验证【英文标题】:ldap & JWT authentication without spring security 【发布时间】:2017-09-22 23:22:53 【问题描述】:我正在尝试创建一个安全模块,该模块将根据 LDAP 检查用户凭据(登录时),并在成功登录时生成 JWT 以进一步请求服务器。
目前我的模块是这样工作的: 我有 3 个其他 API 端点来提供不受保护的身份验证(登录、验证 JWT、注销),因为任何人都必须能够访问这些端点, 以及 1 个通过 JWTAuthenticationProvider 受弹簧安全保护的 userUpdate 端点
所有与 JWT 相关的东西都准备好了,现在我只需要创建一个方法来检查 LDAP 是否用户和密码正确。但我在理解我应该怎么做时遇到了一些麻烦
我已经拥有主用户并传递给 ldap,但是我发现的关于 ldap 身份验证的大多数示例都使用 spring 安全性,我认为在这种情况下不是这样做的方法,因为我需要验证匹配us/pass 仅在登录时(而不是安全地保护我的端点)。
谁能告诉我我应该如何进行验证?有什么我不清楚的吗?请提问、评论和回答。
谢谢
哦,一个编辑:
@Override
public AuthenticationResponse login(AuthenticationRequest authenticationRequest)
checkNotNull(authenticationRequest, "The authenticationRequest is a required argument!");
AuthenticationResponse authenticationResponse = AuthenticationResponse.builder().build();
//currently a pseudo authentication, here is where i should authenticate against LDAP
Optional<Usuario> optionalUsuario = service.findByNombreUsuario(authenticationRequest);
if (optionalUsuario.isPresent())
Usuario usuario = optionalUsuario.get();
String token = JwtTokenUtil.generateToken(authenticationRequest);
authenticationResponse.setAuthenticationToken(token);
repository.saveToken(UserToken.builder()
.nombreUsuario(usuario.getNombreUsuario())
.roles(usuario.getRoles())
.build(), token);
如您所见,我打算仅在登录时对 ldap 进行身份验证,并且仅检查用户和密码是否正确,我将使用其他数据库管理角色和权限
另一个编辑:我有一些基本的 ldap 结构,用于使用 spring 安全性的 ldap 身份验证,但我总是得到错误的凭据
再次编辑:我设法使它与 spring security 一起工作,但是(如预期的那样)我的团队告诉我们,我们需要在没有 spring security 的情况下实现该身份验证,以与我们的自定义角色加载器和令牌创建集成
【问题讨论】:
嗨,费尔南多,您找到解决问题的方法了吗?如果是这样,请与我们分享。最好的。 【参考方案1】:使用http://docs.spring.io/spring-security/site/docs/current/apidocs/org/springframework/security/ldap/authentication/LdapAuthenticationProvider.html 进行身份验证并从LDAP 获取角色,应该使用spring security 来完成,我可能错过了smth 但你能解释一下为什么你不想使用它,因为它是安全标准
【讨论】:
因为我已经有一个身份验证提供程序(一个 JWT)来保护我的 api 的用户端点 首先你可以配置多个身份验证提供程序,其次你可以使用 RememberMeAuthenticationFilter 进行 jwt 令牌处理,希望它有意义 mmm 没有想过拥有多个身份验证提供程序。在那张纸条上,我将如何配置安全性?我的意思是`@Override protected void configure(AuthenticationManagerBuilder auth) throws Exception auth.authenticationProvider(provider); ` 根据提供者进行配置。我还可以拥有多个这些配置吗? ***.com/questions/35363924/… 希望最后的答案对您有所帮助 - 在我之前从未这样做过以上是关于没有弹簧安全性的 ldap 和 JWT 身份验证的主要内容,如果未能解决你的问题,请参考以下文章
Spring Webflux + LDAP/Kerberos 安全性