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_USER
acaba 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?
apache-2.2
kerberos
mod-auth-kerb
Benjamin Wohlwend
fonte
fonte
Respostas:
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-user
diretiva. 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
ErrorDocument
solicitação para redirecionar usuários não autenticados para / webauth / require_authentication:ErrorDocument 401 / webauth / require_authentication
Isso executaria as seguintes ações:
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.
fonte