Spring Blog

temos o prazer de anunciar que o primeiro marco da Extensão Spring Security Kerberos já está disponível para download. A versão também está disponível através do repositório Maven milestone em http://maven.springframework.org/milestone. Com a Extensão Spring Security Kerberos, seus usuários são autenticados em seu aplicativo da web apenas abrindo o URL. Não há necessidade de inserir um nome de usuário/senha e não há necessidade de instalar software adicional.

Antes de aprofundar o Kerberos, gostaria de apresentar o Spring Security Extensions, um novo projeto de Extensão Spring dedicado a fornecer módulos de extensão para o projeto Core Spring Security. Atualmente temos duas extensões desenvolvidas lá: uma integração SAML2 e uma integração Kerberos/SPNEGO. Cada módulo terá seu próprio ciclo de lançamento, para que as pessoas possam se beneficiar dessas extensões assim que estiverem prontas e não precisem esperar pela próxima versão do Spring Security. Se você tiver alguma ideia ou mesmo algum código para outras extensões, diga-nos!

Kerberos / SPNEGO

no primeiro marco deste módulo, fornecemos uma solução Kerberos / SPNEGO pronta para uso para aplicativos da web. Kerberos é um protocolo de autenticação de rede padronizado, projetado para fornecer autenticação forte para aplicativos cliente / servidor, como aplicativos da web onde o navegador é o cliente. É também a maneira recomendada de autenticar usuários em uma rede Windows e substitui o NTLM desatualizado e relativamente inseguro. Além disso, é amplamente utilizado em ambientes *NIX e existem implementações para todas as principais plataformas. Portanto, é muito provável que você já tenha o Kerberos no lugar e agora você pode usá-lo também em seu próprio aplicativo da web. Isso significa que seu usuário apenas insere o URL e ele é automaticamente autenticado com seu nome de usuário de domínio, por exemplo [email protected]. você pode então descobrir este nome de usuário via Spring Security ou mesmo com solicitação.getRemoteUser(). Como isso funciona? Aqui está uma breve visão geral:

o navegador envia uma solicitação GET para seu aplicativo da web (1), que retorna que a autenticação “negociar” é necessária (2). O navegador pedirá ao servidor Kerberos para obter um chamado ticket de serviço (3). O navegador então envia este ticket de serviço, o que prova a identidade do chamador e algumas coisas adicionais para o aplicativo da web (5). Depois de validar o ticket, com base em algum segredo compartilhado entre seu aplicativo da web e o servidor Kerberos, você recebe de volta o nome de usuário.

para que isso funcione, todos os aplicativos da web precisam ser registrados no servidor Kerberos e recebem um serviço prinicipal e um segredo compartilhado atribuído. Para aplicativos da web, o principal do serviço deve ser “HTTP/<nome de domínio qualificado completo>@DOMAIN”. Por exemplo “HTTP/[email protected]”, se o seu aplicativo é executado em web.springsource.com. você então precisa exportar as credenciais deste principal para um arquivo keytab (segredo compartilhado) e torná-lo disponível para o seu aplicativo. Todo sistema baseado em Kerberos funcionará dessa maneira, mas a criação desse principal de serviço e do keytab é diferente entre os sistemas. Vou mostrar como você faz isso com o Microsoft Windows e o MIT Kerberos, mas também deve funcionar com outras implementações.

criando o principal de serviço com o Microsoft Windows 2008 Server

embora isso se refira ao Microsoft Windows 2008 Server, ele deve ser muito semelhante em 2003 e até mesmo em 2000 Server. No ActiveDirectory, basta criar um usuário de domínio normal e, em seguida, atribuir-lhe um principal de serviço (SPN) e criar o keytab com um utilitário de linha de comando. E agora passo a passo:

crie um usuário normal que se tornará o principal do serviço. O nome de usuário e a senha não têm sentido para Kerberos, mas é claro que você deve escolher um nome útil, como http-web.springsource.com. apenas certifique-se de desativar a opção “o Usuário deve alterar a senha no próximo logon” e ativar “a senha nunca expira”.

depois disso, você deve usar a ferramenta de linha de comando “ktpass.exe”. Ele já está incluído no Windows 2008 Server, em versões anteriores você mesmo precisa instalá-lo. Apenas certifique-se de que você está usando uma versão que corresponde à sua versão do servidor e também a localidade deve corresponder. Essa ferramenta atribuirá o nome principal do serviço (SPN) ao usuário criado anteriormente e exportará a chave do Usuário para um arquivo keytab. Se o seu diretor de serviço for “HTTP/[email protected]” e seu usuário é http-web.springsource.com, então seu comando ktpass deve ser assim:


ktpass /out http-web.keytab /mapuser /princ HTTP/ /pass *

o ktpass solicitará alguma senha. Você deve escolher algum Aleatório seguro para ele. Se você agora tem um arquivo http-web.keytab em seu diretório, então tudo funcionou bem. Este arquivo é necessário mais tarde em seu aplicativo, pois contém o segredo compartilhado para validar os tickets de serviço.

criando o principal de serviço com os sistemas MIT Kerberos

On * Nix e também no Mac OS X, a implementação do MIT Kerberos é amplamente utilizada. Com MIT Kerberos é ainda mais simples. Basta abrir o console kadmin e executar os seguintes comandos:


kadmin: addprinc -randkey HTTP/web.springsource.comkadmin: ktadd -k /http-web.keytab HTTP/web.springsource.com

você deve então ter um arquivo http-web.keytab sob raiz. Este arquivo é mais tarde necessário em seu aplicativo, pois contém o segredo compartilhado para validar os tickets de serviço.

Configurando o Spring Security

em Primeiro lugar, os requisitos:

  • Mola de Segurança 3.0.0 M2
  • SUN JRE/JDK 1.6.x
  • ambiente de Kerberos
  • Browser que suporta SPNEGO (Firefox, IE, Safari)

para usar o Kerberos módulo na Primavera de Segurança, você só tem que declarar um filtro, uma autenticação de ponto de entrada e um provedor de autenticação. Incluímos um exemplo de aplicativo da web que você pode usar como ponto de partida. Você só precisa configurar o nome principal do serviço e colocar seu keytab generate lá. O aplicativo de amostra está incluído no download mencionado acima.

se você abrir a segurança.arquivo xml do aplicativo de exemplo, que está em/src / main / webapp / WEB-INF, você vê uma configuração básica de segurança Spring que usa o novo módulo Kerberos.

os dois primeiros beans (SpnegoEntryPoint e SpnegoAuthenticationProcessingFilter) são responsáveis pelo handshake, e o KerberosServiceAuthenticationProvider finalmente valida o ticket de serviço. Atualmente, apoiamos apenas a implementação Kerberos/SPNEGO que está incluída no JRE / JDK da SUN. Como você só recebe de volta o nome de usuário do Kerberos, você também precisa de um UserDetailsService para buscar as funções e talvez alguns outros atributos do Usuário. Nesta amostra, usamos apenas uma implementação fictícia para facilitar o teste.

como você pode ver, já preenchemos o nome prinicipal do serviço e a localização do keytab. Altere esses valores para sua necessidade e certifique-se de que o keytab gerado anteriormente esteja disponível neste local.

agora inicie seu servidor e tente tentar uma autenticação SPNEGO. Você deve ver seu nome de usuário de domínio completo no navegador. No seu código, você pode recuperar o nome de usuário com as classes normais de segurança Spring ou mesmo com a solicitação de chamada de servlet Java padrão.getRemoteUser(). Se não funcionar (talvez você veja uma página vazia), verifique essas coisas:

  • Verifique o arquivo de log
  • certifique-se de que utiliza o nome de domínio totalmente qualificado (não o endereço IP e não o nome curto) na sua URL.
  • se você estiver usando o Internet Explorer: ative “Autenticação Integrada do Windows” e verifique se o domínio (no nosso caso web.springsource.com) está listado na seção Local do site da intranet do IE.
  • se você estiver usando o Firefox: dê uma olhada aqui.
  • se você estiver usando um cliente Windows: Cliente e servidor devem estar em máquinas diferentes, porque caso contrário, o Windows usará NTLM em vez de Kerberos.
  • verifique se o tempo está sincronizado em todas as máquinas envolvidas.
  • Se você estiver usando o Microsoft AD, você vai encontrar alguns mais ajuda aqui: http://msdn.microsoft.com/en-us/library/ms995329.aspx
    • Além disso, o estabelecimento de um adequado ambiente de Kerberos pode ser complicado, e é importante para obter este direito antes de começar a utilizar o Spring Security Kerberos extensão. A maioria dos problemas que encontramos durante a consultoria são problemas com o ambiente Kerberos e não com o próprio aplicativo.

      se você não quiser usar a Extensão Spring Security Kerberos em seu próprio projeto Maven, você deve adicionar o repositório Spring Milestone ao seu pom.xml. Deve ser assim:

e, claro, a dependência:

ainda há algum trabalho a fazer, por exemplo, também fornecer Kerberos para clientes Java e não apenas para o servidor, mas esperamos que você experimente esta versão milestone e forneça alguns comentários. O fórum da Comunidade é o melhor lugar para fazer perguntas ou iniciar discussões sobre novos recursos. Alternativamente, se você encontrar algo errado, você pode levantar um problema Jira.

Deixe uma resposta

O seu endereço de email não será publicado.