Bagaimana cara SSO dengan Active Directory bekerja di mana pengguna secara transparan masuk ke aplikasi web intranet?

40

Saya diberitahu bahwa mungkin membuat aplikasi web yang tidak memerlukan login. Pengguna masuk ke Windows, yang mengautentikasi melalui Pencarian Direktori Aktif (LDAP). Kemudian, mereka harus bisa masuk ke webapp saya dan tidak pernah melihat prompt masuk. Pelanggan ini menyebut ini sebagai Single Sign On (mungkin salah dan bagian dari kebingungan saya).

Tapi, dari apa yang saya baca Single Sign On dari Tomcat docs adalah:

Single Sign On Valve digunakan ketika Anda ingin memberi pengguna kemampuan untuk masuk ke salah satu aplikasi web yang terkait dengan host virtual Anda , dan kemudian identitas mereka dikenali oleh semua aplikasi web lain pada host virtual yang sama.

Ini sangat jelas bagi saya. Pengguna harus login sekali dan dapat mengakses setiap webapp dengan instance tomcat. Tapi, yang perlu saya lakukan adalah membiarkan mereka masuk tanpa pernah memberikan kredensial ke server kucing jantan saya.

Jadi, agar ini berfungsi saya membayangkan:

  • Pengguna membuat permintaan untuk beberapa halaman
  • Server tidak melihat token sesi dan kemudian meminta klien untuk beberapa kredensial.
  • Browser klien tanpa intervensi dari pengguna memberikan beberapa kredensial ke server.
  • Kemudian, menggunakan kredensial yang disediakan oleh browser klien itu melakukan pencarian di LDAP.

Saya telah melihat beberapa contoh yang menggunakan sertifikat sisi klien ... khususnya sistem DoD PKI yang masuk akal bagi saya karena dalam kasus tersebut Anda mengonfigurasi Tomcat untuk meminta sertifikat sisi klien , tetapi hanya masuk ke windows Saya tidak melihat bagaimana ini akan berfungsi dan informasi apa yang browser akan sampaikan ke server dll. Apakah ini yang digunakan untuk NTLM?

blak3r
sumber

Jawaban:

40

Pertama-tama - dan seandainya pengguna lain mengunjungi halaman ini - hanya ada metode otentikasi tertentu yang memungkinkan Anda untuk melakukan SSO yang cepat. Ini adalah NTLM dan Kerberos . LDAP - di sisi lain - tidak akan pernah memberi Anda SSO yang cepat.

NTLM sebenarnya adalah NTLMv1 dan NTLMv2. Ini sangat berbeda dan NTLMv1 sudah usang karena masalah keamanan yang serius. Anda harus menghindari solusi otentikasi Java yang gagal mengidentifikasi dengan benar jika mereka mendukung NTLMv1 atau NTLMv2 karena mereka hanya menggunakan kata "NTLM" dalam dokumentasi mereka. Peluangnya adalah pengembang solusi keamanan tersebut tidak tahu diri mereka sendiri yang merupakan alasan utama untuk mencari jalan keluar darurat.

Berlawanan dengan kepercayaan tradisional, baik NTLMv1 dan NTLMv2 sepenuhnya didokumentasikan oleh Microsoft tetapi Anda masih akan menemukan solusi yang mengklaim telah 'merekayasa balik' protokol tersebut. Memang benar bahwa ini diperlukan sebelum Microsoft mendokumentasikan protokol yang saya percayai sekitar tahun 2006 atau 2007. Pokoknya NTLMv1 adalah no-no. Tidak ada yang salah dengan NTLMv2 per-se tetapi Microsoft telah menghapus NTLM (dalam bentuk apa pun) secara bertahap di semua produknya yang mendukung otentikasi Kerberos. NTLMv1 sudah lama mati dan NTLMv2 sekarang hanya digunakan oleh Microsoft dalam kasus-kasus di mana Domain Controller tidak tersedia. Intinya: NTLM (dalam bentuk apa pun) tidak benar-benar jalan ke depan. Kami sebenarnya harus memberi hormat kepada Microsoft karena mengambil pendekatan berbasis standar di sini.

Ini meninggalkan Anda dengan Kerberos. Microsoft telah membuat protokol untuk negosiasi dan pengiriman informasi otentikasi melalui HTTP. Ini dikenal dalam produk Microsoft sebagai " Otentikasi Windows Terpadu " tetapi telah dipakukan sebagai standar resmi dengan nama SPNEGO . Inilah yang seharusnya Anda cari. SPNEGO mendukung NTLMv2 dan Kerberos sebagai mekanisme otentikasi yang mendasarinya, tetapi untuk alasan di atas Anda harus menargetkan Kerberos daripada NTLMv2.

Saya telah berhasil mengintegrasikan beberapa aplikasi Tomcat (berjalan di Linux / Solaris) dengan Active Directory menggunakan Proyek SPNEGO di SourceForge . Saya menemukan ini sebagai pendekatan paling sederhana. Ini memberi Anda SSO cepat mirip dengan apa yang misalnya server Sharepoint lakukan. Ini kemungkinan besar yang diharapkan pengguna Anda ketika berbicara tentang 'SSO'. Mengerjakan konfigurasi Kerberos dengan benar, membuat kunci, dan mengatur akun 'dummy' di Active Directory bisa merepotkan, tetapi begitu Anda memperbaikinya, kerjanya seperti pesona.

Satu-satunya hal yang saya tidak suka tentang Proyek SPNEGO di SourceForge adalah bahwa saya tidak mengerti seberapa sering ia melakukan otentikasi. Kecurigaan saya yang jahat adalah bahwa ia melakukannya untuk setiap tampilan halaman daripada satu kali untuk setiap sesi. Mungkin saya salah dalam hal ini. Pokoknya: ini menyoroti hal lain untuk dipertimbangkan dalam solusi SSO: Anda tidak ingin menerapkan solusi yang 'spam' penyedia identitas Anda (katakanlah Active Directory) dengan permintaan yang tidak perlu.

unixhacker2010
sumber
2
Terima kasih, jadikan ini jawaban yang diterima. Satu hal yang ditambahkan ke daftar login tanpa login Anda adalah login sertifikat x509 ... Seperti kartu CAC pemerintah.
blak3r
Ini adalah jawaban yang fantastis, bahkan jika usianya 6 tahun! Saya akan menambahkan x10 jika saya bisa!
Tim S.
2

Dalam lingkungan Windows Active Directory, Single Sign On digunakan untuk berarti mengunjungi halaman web internal yang membawa izin masuk Windows Anda dan server web dapat bertindak atasnya. Ini adalah sesuatu yang digunakan untuk NTLM, tetapi implementasi yang lebih baru menggunakan Kerberos sebagai gantinya.

Jika Anda membuka situs web Sharepoint Server, ia tahu siapa Anda tanpa perlu nama pengguna dan kata sandi masuk, tetapi ini hanya berfungsi untuk situs web internal di jaringan yang sama, saya rasa itu tidak masuk akal untuk bekerja di situs web publik. (Saya tidak tahu apakah maksud Anda "virtual host" seperti di vhost Apache atau di server yang di-hosting-kan-sumber).

Berikut ini adalah dokumen Microsoft yang menjelaskan cara kerja otentikasi Kerberos ke server web yang menjalankan IIS / ASP.Net: http://msdn.microsoft.com/en-us/library/ff647076.aspx

Tampaknya mungkin dilakukan dengan Apache / Tomcat / Java. Berikut ini adalah PDF yang menggambarkan implementasi Universitas UK tentang hal itu: http://gfivo.ncl.ac.uk/documents/UsingKerberosticketsfortrueSingleSignOn.pdf dan proyek Codeplex untuknya: http://tomcatspnosatcodeplex.com/ dan Openfire memiliki beberapa dokumentasi yang harus dilakukan dengan umumnya bekerja dengan Java / Kerberos di sini ( http://community.igniterealtime.org/docs/DOC-1060 ).

TessellatingHeckler
sumber
0

Kedengarannya seperti Anda menggambarkan apa yang disebut Microsoft sebagai Otentikasi Windows Terpadu.

Sepertinya Tomcat mendukung Otentikasi Windows, berdasarkan artikel ini .

Artomegus
sumber
-1

Sebagai permulaan, Anda tidak dapat menghindari login. Jika Anda ingin mengidentifikasi pengguna, Anda harus membuatnya masuk. Lupakan NTLM, Kerberos datang untuk menyelamatkan - ini dapat melakukan segalanya dengan cara yang sepenuhnya transparan.

SingleSignOnValve bukan yang Anda cari. Jika Anda menggunakan Tomcat 7, Anda dapat menggunakan SpnegoAuthenticator segera tetapi pada 6 Anda harus menggunakan ini .

Michael-O
sumber
Agak bingung ... kalimat pertama dan kedua sepertinya bertentangan. Dengan Kerberos pengguna tidak diminta untuk masuk?
blak3r
1
Tidak, mereka tidak. Lihat gambaran besarnya, terima kasih kepada Kerberos, pengguna memasukkan kredensial sekali secara manual dan setelah itu setiap login terjadi secara otomatis atas namanya. Ini tidak berarti bahwa tidak ada login sama sekali. Ini yang kamu tulis.