1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Probelmas com Autenticação JAAS/MySQL

Galera... configurei meu projeto para utilizar a segurança com JAAS e estou com um problema na validação do usuário/senha. Estou utilizando o WildFly 8.1 e configurei a entrada do security-domain no standalone.xml conforme exibido abaixo:

<security-domain name="jdbc-security-domain" cache-type="default">
                    <authentication>
                        <login-module code="Database" flag="required">
                            <module-option name="dsJndiName" value="java:/sgaDS"/>
                            <module-option name="principalsQuery" value="select us_password from tb_usuario where us_login=?"/>
                            <module-option name="rolesQuery" value="select p.pp_nome, 'Roles' from tb_usuario u, tb_papel p, tb_usuario_papel up where u.us_id = up.us_id AND p.pp_id = up.pp_id AND u.us_login = ?"/>
                            <module-option name="hashAlgorithm" value="MD5"/>
                            <module-option name="hashEncoding" value="base64"/>
                        </login-module>
                    </authentication>
                </security-domain>

e no meu jboss-web.xml

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
    <security-domain>java:/jaas/jdbc-security-domain</security-domain>
</jboss-web>

Para este projeto estou utilizando o MySQL. Quando tento acessar uma página protegida do meu sistema o servidor redireciona para página de login conforme esperado. O problema está ocorrendo quando digito usuário e senha correto, sempre da login ou senha inválido e redireciona para o loginError.xhtml Minha dúvida é quanto a criptografia da senha, pois definimos as seguintes opções:

<module-option name="hashAlgorithm" value="MD5"/>
<module-option name="hashEncoding" value="base64"/>

e para gerar o senha criptografada utilizei o seguinte código:

public static void main(String[] args) {
    String password = "sga123";
    MessageDigest md;
    try {
        md = java.security.MessageDigest.getInstance("MD5");
        md.update(password.getBytes("UTF-8"));
        byte[] passwordDigest = md.digest();
        String encodedPasswordHash = new sun.misc.BASE64Encoder().encode(passwordDigest);
        System.out.println(encodedPasswordHash);
    } catch (NoSuchAlgorithmException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    }

estou pegando o encodedPasswordHash e fazendo um insert no banco de dados para o usuário "lugo". O problema é que quando tento logar no sistema, não obtenho sucesso.

OBS: Já está inserido o papel e o relacionamento entre usuario/papel no banco de dados. Segue as configurações de login no web.xml

<security-constraint>
      <display-name>Proteger arquivos XHTML</display-name>
      <web-resource-collection>
          <web-resource-name>restringir acesso aos arquivos xhtml</web-resource-name>
          <url-pattern>*.xhtml</url-pattern>
      </web-resource-collection>
  </security-constraint>
  <security-constraint>
      <display-name>Política de segurança do sistema</display-name>
      <web-resource-collection>
          <web-resource-name>Protege todo o site</web-resource-name>
          <url-pattern>/protegido/*</url-pattern>
          <http-method>GET</http-method>
          <http-method>POST</http-method>
      </web-resource-collection>
      <auth-constraint>
          <role-name>SGA</role-name>
      </auth-constraint>
  </security-constraint>
  <security-role>
      <role-name>SGA</role-name>
  </security-role>

Tem alguma ideia do que posso estar fazendo de errado?

  • estou meio sem tempo, mas aqui tem o método que gera o hash de modo correto login-realm-md5-resolvido

    Dilnei Cunha   28 de set de 2014
  • Dilnei, a senha criptografada do link que me mandou sai exatamente igual a senha gerada pelo código que coloquei no post! tenha ideia do que mais pode estar acontecendo de errado?

    Emerson Lugo   28 de set de 2014
  • vc ativou o log do jboss? se sim o que sai no log?

    Dilnei Cunha   28 de set de 2014
  • eu diria que o erro esta nesta linha:

    <module-option name="rolesQuery" value="select p.pp_nome, 'Roles' from tb_usuario u, tb_papel p, tb_usuario_papel up where u.us_id = up.us_id AND p.pp_id = up.pp_id AND u.us_login = ?"/>
    
    se executar ela direto no banco ela traz a rule para o cara poder logar?
    Dilnei Cunha   28 de set de 2014
  • aqui esta minhas configs funciona de boa, tudo vem da documentação do Wildfly. JAAS + Wldfly

    Dilnei Cunha   28 de set de 2014
Mostrar todos os 15 comentários>
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

2 respostas

Não é a resposta que estava procurando? Procure outras perguntas com as tags java-ee segurança wildfly ou faça a sua própria pergunta.