Autenticação Spring Security Digest

Autenticação Spring Security Digest

1. Visão geral

Este tutorial mostra como instalar, configurar e personalizar a autenticação Digest com Spring. Semelhante aoarticle covering Basic Authentication anterior, vamos construir sobre o tutorial do Spring MVC e proteger o aplicativo com o mecanismo Digest Auth fornecido pelo Spring Security.

2. A configuração XML de segurança

A primeira coisa a entender sobre a configuração é que, embora o Spring Security tenha suporte totalmente pronto para uso para o mecanismo de autenticação Digest, esse suporte énot as well integrated into the namespace como era a autenticação básica.

Nesse caso, precisamos manualmentedefine the raw beans que farão a configuração de segurança - oDigestAuthenticationFiltere oDigestAuthenticationEntryPoint:


    
    


    
    




    

    



    
        
            
        
    

Em seguida, precisamos integrar esses beans na configuração geral de segurança - e, neste caso, o espaço para nome ainda é flexível o suficiente para permitir isso.

A primeira parte disso está apontando para o bean de ponto de entrada personalizado, por meio do atributoentry-point-ref do elemento<http> principal.

A segunda parte éadding the newly defined digest filter into the security filter chain. Como esse filtro é funcionalmente equivalente aBasicAuthenticationFilter, estamos usando a mesma posição relativa na cadeia - isso é especificado pelo aliasBASIC_AUTH_FILTER emSpring Security Standard Filters geral.

Finalmente, observe que o Filtro Digest está configurado parapoint to the user service bean - e aqui, o namespace é novamente muito útil, pois nos permite especificar um nome de bean para o serviço de usuário padrão criado pelo elemento<user-service>:

3. Consumindo o aplicativo seguro

Estaremos usandothe curl command para consumir o aplicativo seguro e entender como um cliente pode interagir com ele.

Vamos começar solicitando a página inicial -without providing security credentials na solicitação:

curl -i http://localhost/spring-security-mvc-digest-auth/homepage.html

Como esperado, recebemos uma resposta com um código de status401 Unauthorized:

HTTP/1.1 401 Unauthorized
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=CF0233C...; Path=/spring-security-mvc-digest-auth/; HttpOnly
WWW-Authenticate: Digest realm="Contacts Realm via Digest Authentication", qop="auth",
  nonce="MTM3MzYzODE2NTg3OTo3MmYxN2JkOWYxZTc4MzdmMzBiN2Q0YmY0ZTU0N2RkZg=="
Content-Type: text/html;charset=utf-8
Content-Length: 1061
Date: Fri, 12 Jul 2013 14:04:25 GMT

Se essa solicitação fosse enviada pelo navegador, o desafio da autenticação solicitaria credenciais ao usuário usando um simples diálogo de usuário / senha.

Vamos agoraprovide the correct credentialse enviar a solicitação novamente:

curl -i --digest --user
   user1:user1Pass http://localhost/spring-security-mvc-digest-auth/homepage.html

Observe que estamos habilitando a autenticação Digest para o comandocurl por meio do sinalizador–digest.

A primeira resposta do servidor será a mesma - o401 Unauthorized - mas o desafio agora será interpretado e atendido por uma segunda solicitação - que terá êxito com um200 OK:

HTTP/1.1 401 Unauthorized
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=A961E0D...; Path=/spring-security-mvc-digest-auth/; HttpOnly
WWW-Authenticate: Digest realm="Contacts Realm via Digest Authentication", qop="auth",
  nonce="MTM3MzYzODgyOTczMTo3YjM4OWQzMGU0YTgwZDg0YmYwZjRlZWJjMDQzZWZkOA=="
Content-Type: text/html;charset=utf-8
Content-Length: 1061
Date: Fri, 12 Jul 2013 14:15:29 GMT

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=55F996B...; Path=/spring-security-mvc-digest-auth/; HttpOnly
Content-Type: text/html;charset=ISO-8859-1
Content-Language: en-US
Content-Length: 90
Date: Fri, 12 Jul 2013 14:15:29 GMT





    

This is the homepage

Uma observação final sobre essa interação é que um cliente podepreemptively send the correct Authorization header com a primeira solicitação e, portanto, totalmenteavoid the server security challengee a segunda solicitação.

4. As dependências do Maven

As dependências de segurança são discutidas em detalhes emSpring Security Maven tutorial. Resumindo, precisaremos definirspring-security-webespring-security-config como dependências em nossopom.xml.

5. Conclusão

Neste tutorial, introduzimos a segurança em um projeto simples do Spring MVC, aproveitando o suporte à autenticação Digest na estrutura.

A implementação desses exemplos pode ser encontrada emthe github project - este é um projeto baseado em Eclipse, portanto, deve ser fácil de importar e executar como está.

Quando o projeto é executado localmente, o html da página inicial pode ser acessado em (ou, com configuração mínima do Tomcat, na porta 80):

Finalmente, não há razão para que um aplicativo precise dechoose between Basic and Digest authentication -both can be set up simultaneously on the same URI structure, de forma que o cliente possa escolher entre os dois mecanismos ao consumir o aplicativo web.