ldap&没有弹簧安全性的JWT认证

时间:2017-04-25 19:22:19

标签: java authentication spring-security ldap jwt

我正在尝试创建一个安全模块,该模块将针对LDAP检查用户凭据(登录时),并且在成功登录时生成JWT以进一步请求服务器。

目前我的模块的工作方式如下: 我有3个其他API端点来提供未受保护的身份验证(登录,验证JWT,注销),因为任何人都必须能够访问这些端点, 还有一个userUpdate端点通过JWTAuthenticationProvider

使用spring security进行保护

所有关于JWT的东西都准备好了,现在我只需要创建一个方法来检查LDAP是否正确用户和密码。但我在理解我应该怎么做时遇到一些麻烦ldap users

我已经拥有主用户并传递给ldap,但是我发现的关于ldap身份验证的大多数示例都是Spring安全性的,我认为在这种情况下这样做是因为我需要验证匹配我们/仅在登录时传递(并且不保护我的端点具有安全性)。

任何人都可以告诉我如何进行验证吗?我不清楚的任何东西?请询问,评论和回答。

感谢

哦,一个编辑:

@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进行身份验证,并且只检查用户和传递是否正确,我将使用其他数据库管理角色和权限

另一个编辑:我使用spring安全性为ldap auth提供了一些基本的ldap结构,但我总是得到错误的凭据

再次编辑:我设法使其与spring安全性一起工作,但是(正如预期的那样)我的团队告诉我们需要在没有spring安全性的情况下实现该身份验证以与我们的自定义角色加载器和令牌创建集成

1 个答案:

答案 0 :(得分:0)

使用http://docs.spring.io/spring-security/site/docs/current/apidocs/org/springframework/security/ldap/authentication/LdapAuthenticationProvider.html进行身份验证并从LDAP获取角色,应该使用spring security来完成,我可能错过了smth但是你可以解释为什么你不想使用它,因为它是安全标准