AcegiSecurity autenticando no LDAP
01/11/2011 13:31
1
Olá pessoal,

Usei o tutorial http://grails.org/AcegiSecurity+Plugin+-+LDAP+Tutorial para autenticar no LDAP.

Eu consigo autenticar no LDAP com o plugin AcegiSecurity.

Mas o que eu achei estranho é que preciso cadastrar o usuário, (http://localhost:8080/bookstore/user), mas sem cadastrar o password, ele realmente autentica o password no servidor LDAP.

Se o usuário não estiver cadastrado no grails ele não autentica no LDAP.

Gostaria de uma ajuda de vocês, como que eu faço para autenticar o usuário e senha no LDAP, sem precisar cadastrar o usuário no GRAILS?

Obrigado



Tags: AcegiSecurity autenticando no LDAP


0
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?


0
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
03/11/2011 10:25


0
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.


0
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
03/11/2011 11:50


0
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.


0
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
03/11/2011 14:18



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto