Oi Igor, neste caso, se não me engano, a fonte de cadastros de usuários teria de ser outra além do seu sistema, não?
Ou então, no seu caso, apenas parte dos dados dos usuários ficaram neste, e o restante, referente a autenticação, ficaria no LDAP. Estou indo mais ou menos pelo caminho certo pra te ajudar?
Olá Henrique,
No meu caso, a fonte de cadastro seria somente o LDAP, basicamente ele teria usuário e senha para a aplicação do grails autenticar(na aplicação do grails não teria nenhuma informação do usuário).
Mas com o plugin acegi e usando o tutorial que coloquei no link acima, a fonte de dados tem que estar no GRAILS e no LDAP.
No grails é cadastrado somente o usuário e no LDAP usuário e senha.
A aplicação do grails autentica somente se você tiver o usuário cadastrado nela, acho que ela verifica o usuário informado no login em sua base e depois verifica o usuário e senha no LDAP e ele autentica corretamente.
Mas o que eu gostaria é que toda a fonte de dados(usuário e senha) ficassem somente no LDAP e nenhuma informação no GRAILS.
Como que eu faço isso?
Se precisar de mais informação eu te falo
Obrigado
Igor
Oi Igor, entendi.
Não tenho muito conhecimento do plugin Grails, mas algum do Acegi. O que você poderia fazer neste caso é seguir um dos caminhos abaixo:
[list=1]
Implementar o seu próprio fazendo toda a autenticação via LDAP mesmo
[/list]
Neste caso, você vai ter de alterar o arquivo de configuração do Spring adicionando o seu authentication manager customizado e voilá, vai funcionar perfeito. Já fiz algo similar (não era LDAP, mas uma criatura bem mais cabulosa) com este plugin e funcionou perfeitamente.
Henrique,
Como sou novato em grails, você poderia por favor ajudar a como fazer essa customização?
No arquivo SecurityConfig.groovy, tenho as configurações do LDAP:
useLdap = true
ldapRetrieveDatabaseRoles = false
ldapRetrieveGroupRoles = true
ldapServer = 'ldap://127.0.0.1:389'
ldapManagerDn = 'cn=manager,dc=empresa,dc=com,dc=br'
ldapManagerPassword = 'tux'
ldapSearchBase = 'dc=empresa,dc=com,dc=br'
ldapSearchFilter = '(uid={0})'
ldapGroupSearchBase = 'ou=grupos,dc=empresa,dc=com,dc=br'
ldapGroupSearchFilter = 'uniquemember={0}'
Aonde eu aponto esse authentication manager customizado e como que eu customizo para autenticar no LDAP com usuário e senha?
Muito obrigado,
Igor
Oi Igor,
no caso, não sei se só por configurações você resolveria o problema não. Eu me lembro que no meu caso eu tive de implementar em Java mesmo (poderia ser em Grails sem problema) o authentication manager para a minha situação.
Ai, basta você incluir o jar (ou código fonte) no seu projeto e, no arquivo de configuração do Spring, adicionar este authentication manager que você criou.
Henrique,
Olhando o site http://grails.org/AcegiSecurity+Plugin+-+Custom+UserDetailsService
Seria isso que eu teria que fazer?
Eu criei a classe MyUserDetailsService dentro de scr/groovy:
package bookstore;
import org.springframework.security.userdetails.UserDetails;
import org.springframework.security.userdetails.UserDetailsService;
public class MyUserDetailsService implements UserDetailsService {
public UserDetails loadUserByUsername(final String username)
throws UsernameNotFoundException, DataAccessException {
// lookup user and data
return new MyUserDetails(username, password, enabled,
accountNonExpired, credentialsNonExpired,
accountNonLocked, authorities, id, fullName);
}
}
e coloquei no conf/stpring/resources.groovy:
beans = {
userDetailsService(bookstore.MyUserDetailsService)
}
Mas ao carregar o projeto, dá o seguinte erro:
[groovyc] org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
[groovyc] /home/igordami/ldap_teste/bookstore/src/groovy/MyUserDetailsService.groovy: 10: unable to resolve class UsernameNotFoundException
[groovyc] @ line 10, column 4.
[groovyc] public UserDetails loadUserByUsername(final String username)
[groovyc] ^
[groovyc]
[groovyc] /home/igordami/ldap_teste/bookstore/src/groovy/MyUserDetailsService.groovy: 10: unable to resolve class DataAccessException
[groovyc] @ line 10, column 4.
[groovyc] public UserDetails loadUserByUsername(final String username)
[groovyc] ^
[groovyc]
[groovyc] /home/igordami/ldap_teste/bookstore/src/groovy/MyUserDetailsService.groovy: 15: unable to resolve class MyUserDetails
[groovyc] @ line 15, column 14.
[groovyc] return new MyUserDetails(username, password, enabled,
[groovyc] ^
[groovyc]
[groovyc] 3 errors
Compilation error: Compilation Failed
Desculpe minha ignorância, mas com base no site http://grails.org/AcegiSecurity+Plugin+-+Custom+UserDetailsService você poderia ajudar a implementar as classes?
Obrigado