Saya menerapkan otentikasi SSO menggunakan mod_auth_kerb di Apache. Konfigurasi saya terlihat seperti ini:
<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>
Masalah saya adalah, tanpa require valid-user
, mod_auth_kerb bahkan tidak mencoba untuk mengotentikasi pengguna dan KERBEROS_USER
akhirnya menjadi (null)
. Jika saya menambahkan require valid-user
, pengguna diautentikasi secara otomatis jika browser mendukungnya, tetapi akan ditampilkan formulir masuk modal jelek (ala HTTP Basic Auth) jika browser tidak mendukung Negosiasi Kerberos.
Yang ingin saya capai adalah bahwa jika pengguna mengunjungi /login/
, mod_auth_kerb mencoba untuk mengotentikasi pengguna melalui Negosiasi Kerberos. Jika gagal, formulir masuk HTML normal akan disajikan kepada pengguna.
Apakah mungkin mengkonfigurasi Apache / mod_auth_kerb sedemikian rupa?
sumber
Jawaban:
Saya pernah melakukan ini ketika saya membangun alat signon tunggal sederhana (untuk menggabungkan Kerberos dengan mod_auth_tkt). Itu membutuhkan sedikit ketidakjujuran:
/ webauth / login dilindungi oleh
require valid-user
arahan. Jika seseorang terhubung dengan kredensial Kerberos yang valid, kami mendapatkan nama pengguna mereka dari REMOTE_USER, memberi mereka cookie otentikasi, dan mengirimkannya dalam perjalanan.Konfigurasi Apache menggunakan
ErrorDocument
permintaan untuk mengarahkan pengguna yang tidak diautentikasi ke / webauth / require_authentication:ErrorDocument 401 / webauth / require_authentication
Ini akan melakukan tindakan berikut:
Formulir login akan melakukan persis apa yang Anda harapkan: menyajikan formulir nama pengguna / kata sandi, memvalidasi yang sama, dan kemudian memberi mereka cookie auth.
sumber