我通读了Spring LDAP reference docs并且无法确定针对LDAP服务器的用户身份验证是否自动化。
“自动化”是指如果您在ContextSource
中提供userDn和密码,它会在bean实例化时自动发生。也就是说,程序员永远不必打电话给LdapTemplate.authenticate(...)
- 它发生在“幕后”。
所以我想知道
谢谢,
KTM
ContextSource
是我的beans文件中的上下文源之一,用户可以选择使用它。它用于在运行时配置userDn和密码(出于安全原因)。我想知道LDAP应用程序是否实际使用我在运行时在身份验证中收集的userDn / password。 (在我的代码执行之前进行身份验证吗?它是否忽略了我的代码配置的userDn / password字段?)
public class RuntimeContext extends LdapContextSource {
public RuntimeContext() {
super();
if (!resolveAuthInfo()) {
System.out.println("Failed to resolve auth info. Exiting...");
System.exit(1);
}
}
public boolean resolveAuthInfo()
{
String myUserDn, myPassword;
try {
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
System.out.print("userDn: ");
myUserDn = br.readLine();
System.out.print("password: ");
myPassword = br.readLine();
} catch (IOException e) {
return false;
}
super.setUserDn(myUserDn);
super.setPassword(myPassword);
return true;
}
}
答案 0 :(得分:1)
我想知道LDAP应用程序是否实际使用我在运行时在身份验证中收集的userDn /密码。
http://static.springsource.org/spring-security/site/docs/3.0.x/reference/ldap.html
它将使用您在运行时收集的userDn和密码。根据您配置bean的方式,LDAP身份验证将使用Spring中的两个路径之一:
BindAuthenticator
)PasswordComparisonAuthenticator
)在LdapAuthenticationProvider
的上下文中调用这些身份验证器,可以将其配置为安全命名空间配置中的身份验证器:
<authentication-manager alias="authenticationManager">
<authentication-provider user-service-ref="usernamePasswordUserDetailsService">
<password-encoder ref="passwordEncoder">
<salt-source ref="saltSource"/>
</password-encoder>
</authentication-provider>
<authentication-provider ref="ldapAuthenticationProvider"/>
</authentication-manager>
调用UsernamePasswordAuthenticationFilter
时(通过/ auth / login页面):
<http auto-config="true">
<form-login login-page="/auth/login"
login-processing-url="/auth/j_security_check"/>
<logout invalidate-session="true" logout-url="/auth/logout"/>
</http>
使用用户名和密码创建令牌。 LdapAuthenticationProvider
响应该令牌类型:
public class LdapAuthenticationProvider implements AuthenticationProvider, MessageSourceAware {
...
public boolean supports(Class<?> authentication) {
return (UsernamePasswordAuthenticationToken.class.isAssignableFrom(authentication));
}
}
并使用您在LdapContextSource
中存储的信息进行身份验证。