Login via WS SpringSecurity / Shiro
08/08/2013 16:30
0
Boa tarde,

Em um projeto pessoal, estou integrando duas plataformas e vou disponibilizar o login via webservice em uma delas. A outra aplicação irá autenticar por este WebService.

O Webservice recebe o usuário e senha criptografados e retorna um true/false caso esteja correto/incorreto.

Como posso utilizar essa consulta de login nos serviços disponibilizados do SpringSecurityCore ou no Apache Shiro para autenticar o usuário?
Tags: autenticação, shiro, springsecurity, webservice


1

No springsecurity alter o arquivo Config.groovy

grails.plugins.springsecurity.useBasicAuth = true
grails.plugins.springsecurity.basic.realmName = "Servidor de backups BC Sistemas"

grails.plugins.springsecurity.filterChain.chainMap = [
'/api/**': 'JOINED_FILTERS,-exceptionTranslationFilter',
'/**': 'JOINED_FILTERS,-basicAuthenticationFilter,-basicExceptionTranslationFilter'
]


No shiro você deve alterar o arquivo Config.groovy adicioando:

security {
shiro {
authc.required = false
filter.config = """\
[filters]

# HTTP Basic authentication
authcBasic = org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter
authcBasic.applicationName = Autenticação API

[urls]
/api/** = authcBasic
"""
}
}



0
isso é pra parte do servidor, correto?
eu estava parseando na mão mesmo, e vendo se estava igual mas parece ser bem melhor

e pra parte do cliente? tenho q alterar os Authentication Providers no spring security core?
08/08/2013 17:10


0
Nunca trabalhei com o Shiro no Grails, mas fora sim.

O que posso dizer? Acho a API do Shiro muito mais simples de lidar.
Além disto, ele tem um recurso interessantíssimo que não há no Spring Security (ao menos até onde vi): sessões independentes do HTTP. Isto é muito útil quando, por exemplo, você precisa implementar um protocolo de comunicação.


0
Mussato, não entendi muito bem a questão da parte cliente.
Mas assim, você pode acessar de qualquer tecnlogia, delphi, android, java etc...
Em java no cliente eu utilizo o httpclient, no link a seguir tem um exemplo:
Http Basic Authentication


0
Para autenticar os usuários eu utilizo o CAS (Central Authentication Service): http://www.jasig.org/cas

O CAS, por sua vez, está autenticando no Active Directory. Você pode fazer o CAS se autenticar de várias formas, JDBC, etc.

O CAS nada mais é que um WAR que você faz o deploy em um container e configura.

A vantagem do CAS é que o serviço de autenticação fica fora da sua aplicação e, com isso, você pode utilizar o CAS para outras aplicações, seja Grails ou não. Enfim, vira uma Central de Autenticação para suas aplicações Web. Sem contar que tira da sua app a responsabilidade de autenticar o usuário e essa é uma grande responsabilidade.

Eu utilizo os plugins Spring Security Core + Spring Security CAS, mas sei que o Shiro tem um módulo que se integra com o CAS.


09/08/2013 12:53


0
Eu tenho uma aplicação também em Grails que está tentando realizar login através do webservice, estou chamando esta aplicação de cliente

para realizar login nesta aplicação, vou consultar o WS

os exemplos e documentação que encontrei abordavam somente login através de entidades no banco de dados, mas nada remoto
09/08/2013 13:42


0
Somente para tentar esclarecer melhor:

quero logar com usuario, login e role localizados no webservice, de forma remota
eu fiz uma gambiarra com o springsecurity e o metodo reauthenticate:


def doLogin(String username, String password){
def isLoginValid = consumeLoginWS(encode(username), encode(password))
if(isLoginValid){
//aqui ele loga o usuário
def roles = getLoginRolesWS(username)
springSecurityService.reauthenticate(username)
}else{
redirect "erro"
}

}



obs: eu fiz um esquema pra "copiar" o username e roles desse usuario através de um job
09/08/2013 16:38


0
Mussatto assim, se você utilizar as configurações a seguir, o springsecurity vai fazer tudo sozinho:


grails.plugins.springsecurity.useBasicAuth = true
grails.plugins.springsecurity.basic.realmName = "Servidor de backups BC Sistemas"

grails.plugins.springsecurity.filterChain.chainMap = [
'/api/**': 'JOINED_FILTERS,-exceptionTranslationFilter',
'/**': 'JOINED_FILTERS,-basicAuthenticationFilter,-basicExceptionTranslationFilter'
]


Você deve implentar o controlador ApiController:

class ApiController {
def testeWS() {
render ([ sucesso: true, msg: "ws esta funcionando"] as JSON)
}
}


Como voce configurou que o useBasicAuth = true tudo o que estiver no controlador api, vai exigir autenticação.

Teste acessando http://localhot/aplicacao/api/testews


0
Olá Leandro,
Estou com problemas para realizar login em um WS que estou implementando, uso o spring security.
Coloquei as configurações acima como você sugeriu, mas não consigo realizar o login no WS...
Para testar estou usando um add-on do firefox (restclient). Sabe me dizer para qual URL tenho que enviar o username e password? vi que no form do spring security os names dos filds são "j_username" e "j_password", tentei enviar valores com esses names (via restclient) mas tbm não deu certo. Tentei usar o "autentication" que o próprio add-on traz, mas também não funcionou.

Se puder dar um help será de grande ajuda.
31/03/2014 21:14



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