Como dizer ao mod_auth_kerb para fazer seu trabalho, apesar de não "exigir usuário válido"

11

Eu implementei uma autenticação SSO usando mod_auth_kerb no Apache. Minha configuração fica assim:

<Location /login/ >
    AuthType Kerberos
    AuthName "Kerberos Login"
    KrbMethodNegotiate on
    KrbAuthoritative on
    KrbVerifyKDC on
    KrbAuthRealm D.ETHZ.CH
    Krb5Keytab /etc/HTTP.keytab
    KrbSaveCredentials on
    RequestHeader set KERBEROS_USER %{REMOTE_USER}s
</Location>

Meu problema é que, sem require valid-user, o mod_auth_kerb nem tenta autenticar o usuário e KERBEROS_USERacaba sendo (null). Se eu adicionar require valid-user, o usuário será autenticado automaticamente se o navegador suportar, mas será mostrado um formulário de login modal feio (ala HTTP Basic Auth) se o navegador não suportar o Kerberos Negotiate.

O que eu quero alcançar é que, se um usuário visita /login/, o mod_auth_kerb tenta autenticar o usuário através do Kerberos Negotiate. Se isso falhar, um formulário de login HTML normal será apresentado ao usuário.

É possível configurar o Apache / mod_auth_kerb dessa maneira?

Benjamin Wohlwend
fonte
Se você não fornecer um formulário de login e o tratamento adequado de erros, esse é o comportamento (esperado) adequado.
BillThor

Respostas:

12

Fiz isso uma vez quando construí uma ferramenta simples de conexão única (para mesclar o Kerberos com mod_auth_tkt). Exigia um pouco de trapaça:

  • / webauth / login foi protegido por uma require valid-userdiretiva. Se alguém conectado com credenciais válidas do Kerberos, obtivemos o nome de usuário de REMOTE_USER, fornecemos um cookie de autenticação e os enviamos a caminho.

  • A configuração do Apache usou uma ErrorDocumentsolicitação para redirecionar usuários não autenticados para / webauth / require_authentication:

    ErrorDocument 401 / webauth / require_authentication

    Isso executaria as seguintes ações:

    • Retorne um código de resultado 401 (normalmente, ErrorDocuments come seu código de resultado) e
    • Apresente um formulário de login.
  • O formulário de login faria exatamente o que você espera: apresente um formulário de nome de usuário / senha, valide o mesmo e, em seguida, forneça o cookie de autenticação.

larsks
fonte
+1 para uma solução interessante.
Sam Halicke
ótimo, isso funciona perfeitamente!
Benjamin Wohlwend