2017-07-02 5 views
0

RESTサービスでLDAP認証を行うプロジェクトがあります。私のLDAP構成には、SHA(Salted SHA)パスワードハッシュ方式があります。私が使用したときにSHAメソッドをサポートしているSpringのLDAP認証のベストプラクティスガイドでは、クレデンシャルが間違っている間に悪いクレデンシャルを取得しました。Salted SHAタイプのSpring LDAP認証の不正な資格情報パスワード

マイコンフィギュレーションクラス参照:

@Configuration 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 

    @Override 
    public void configure(AuthenticationManagerBuilder auth) throws Exception { 
     auth 
      .ldapAuthentication() 
       .userSearchFilter("uid={0}") 
       .contextSource(contextSource()) 
       .passwordCompare() 
        .passwordEncoder(new LdapShaPasswordEncoder()) 
        .passwordAttribute("userPassword"); 
    } 

    @Bean 
    public DefaultSpringSecurityContextSource contextSource() { 
     return new DefaultSpringSecurityContextSource(Arrays.asList("ldap://localhost:8389/"), "dc=springframework,dc=org"); 
    } 
} 

マイLDIF構成。

dn: uid=ben,ou=people,dc=springframework,dc=org 
objectclass: top 
objectclass: person 
objectclass: organizationalPerson 
objectclass: inetOrgPerson 
cn: Ben Alex 
sn: Alex 
uid: ben 
userPassword: {SSHA}pcFdFhO/NS98EhTRup60PMkHMWFRDkJ3jUu1Zg== 

私の元のパスワードはTest1234です。私のpom.xmlファイル。

<dependency> 
     <groupId>org.springframework.ldap</groupId> 
     <artifactId>spring-ldap-core</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-ldap</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>com.unboundid</groupId> 
     <artifactId>unboundid-ldapsdk</artifactId> 
    </dependency> 

SSHAパスワード暗号化を使用しているLDAPサーバーのユーザー名/パスワードで認証するにはどうすればよいですか?

答えて

0

は、私は同じ問題を抱えていたし、それは私のために働いた

auth 
     .ldapAuthentication() 
      .userSearchFilter("uid={0}") 
      .contextSource(contextSource()) 
      .passwordCompare().passwordAttribute("userPassword") 
      .and() 
      .passwordEncoder(passwordEncoder()); 

このアプローチを試してみてカスタムパスワードエンコーダ

private PasswordEncoder passwordEncoder() { 
    final LdapShaPasswordEncoder sha = new LdapShaPasswordEncoder(); 
    return new PasswordEncoder() { 
     @Override 
     public String encode(CharSequence rawPassword) { 
      return sha.encodePassword(rawPassword.toString(), null); 
     } 
     @Override 
     public boolean matches(CharSequence rawPassword, String encodedPassword) { 
      return sha.isPasswordValid(encodedPassword, rawPassword.toString(), null); 
     } 
    }; 
} 

を作成します。

希望すると助かります!

関連する問題