我目前正致力于构建一个访问Spring Boot后端服务器的Angular2-Application,用于通过REST-API进行身份验证和编辑数据库数据。我当前针对Active Directory进行身份验证的基本配置如下所示:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().authenticated().and().formLogin();
}
@Override
protected void configure(AuthenticationManagerBuilder authManagerBuilder) throws Exception {
authManagerBuilder.authenticationProvider(activeDirectoryLdapAuthenticationProvider()).userDetailsService(userDetailsService());
}
@Bean
public AuthenticationManager authenticationManager() {
return new ProviderManager(Arrays.asList(activeDirectoryLdapAuthenticationProvider()));
}
@Bean
public AuthenticationProvider activeDirectoryLdapAuthenticationProvider() {
ActiveDirectoryLdapAuthenticationProvider provider = new ActiveDirectoryLdapAuthenticationProvider(AD_DOMAIN, "ldap://" + AD_URL);
provider.setConvertSubErrorCodesToExceptions(true);
provider.setUseAuthenticationRequestCredentials(true);
return provider;
}
这样可以在使用默认的Boot Login Form登录后访问基本的Spring Boot Actuator-API。
下一步是将activeDirectoryLdapAuthenticationProvider与Angular2可以访问的基于令牌的身份验证解决方案交织在一起 - 为此,我找到了an example repository on gitHub。它使用具有自定义服务结构的JWT令牌实现基于HMAC的身份验证。
我现在的问题在于了解Spring Security的组件如何在后台协同工作。据我了解这个例子,它使用UserDTO和LoginDTO实现了UserDetailsService的自定义版本及其环境。这些访问MockUser-Service,例如用户数据 - 这是我想要避免的,而是访问我们的Active Directory来验证用户。
我仍在挖掘存储库,试图理解每个自定义类实现,如果我可以自定义AuthenticationService以满足我的需求,但我感到相对迷失。
我正在寻找的是组合这三个组件或Spring Security以及默认UserDetailsService和AuthenticationProviders如何交互的经验,因此我可以尝试将ActiveDirectory逻辑融入令牌解决方案。
或者,有没有办法将default-LDAP / AD-Configuration与default JWT-Solution such as this结合起来?