Dalam artikel ini saya akan memberi tahu Anda bagaimana kami beralih dari NTLM ke otorisasi Kerberos untuk aplikasi di Oracle Weblogic Server, dengan demikian menyederhanakan login pengguna dengan menghapus kebutuhan untuk memasukkan kata sandi. Semua pengguna, serta server aplikasi, berada dalam domain yang sama; otorisasi domain untuk aplikasi server Weblogic sebelumnya juga telah dikonfigurasi. Semua konfigurasi diverifikasi pada WLS 12.1.2.
Pertama, sedikit teori, sangat singkat untuk pemahaman lebih lanjut tentang proses interaksi.
Apa itu Single Sign-On?
Single Sign-On (SSO) adalah mekanisme di mana tindakan otentikasi pengguna tunggal memungkinkan pengguna untuk mengakses semua komputer dan sistem di mana ia memiliki izin untuk mengakses tanpa harus memasukkan beberapa kata sandi. Kredensial yang dimasukkan sebelumnya akan digunakan kembali secara transparan oleh berbagai komponen.
Apa itu Kerberos?
Kerberos adalah protokol otentikasi jaringan yang pertama kali dikembangkan oleh Massachusetts Institute of Technology. Kerberos adalah metode aman untuk mengautentikasi permintaan layanan di jaringan dan dirancang untuk memberikan otentikasi kuat untuk aplikasi client-server menggunakan kriptografi dengan kunci rahasia.
Apa itu SPNEGO?
SPNEGO adalah mesin negosiasi GSSAPI yang sederhana dan aman. Ini adalah antarmuka standar untuk otentikasi (mis. JNDI untuk pencarian direktori), implementasi default untuk SPNEGO pada Windows adalah Kerberos (mis. LDAP untuk JNDI). Terminologi Microsoft menggunakan "Otentikasi Windows Terpadu" sebagai sinonim untuk SPNEGO. Dalam Windows Integrated Authentication, protokol Kerberos atau NTLM dapat dinegosiasikan.
Ketika server menerima permintaan dari Internet Explorer (IE 6.1 atau lebih tinggi), ia dapat meminta browser menggunakan protokol SPNEGO untuk otentikasi. Protokol ini melakukan otentikasi Kerberos melalui HTTP dan memungkinkan Internet Explorer untuk mendelegasikan wewenang yang didelegasikan sehingga aplikasi web dapat masuk ke layanan Kerberized berikutnya atas nama pengguna.
Ketika server HTTP ingin menjalankan SPNEGO, ia mengembalikan respons "401 Tidak Sah" ke permintaan HTTP dengan judul "WWW-Authorization: Negotiate". Internet Explorer kemudian menghubungi Layanan Tiket (TGS) untuk mendapatkan tiket. Dia memilih nama khusus peserta layanan untuk meminta tiket, misalnya:
HTTP/webserver@<DOMAIN NAME>
Tiket yang dikembalikan kemudian dibungkus dengan token SPNEGO, yang disandikan dan dikirim kembali ke server menggunakan permintaan HTTP. Token terungkap dan tiket diautentikasi.
Manfaat Kerberos
Menggunakan Kerberos memungkinkan administrator untuk menonaktifkan otentikasi NTLM segera setelah semua klien jaringan dapat mengotentikasi Kerberos. Kerberos lebih fleksibel dan efisien daripada NTLM dan lebih aman.
Konfigurasikan SSO berbasis Kerberos di Lingkungan Server Aplikasi Weblog
Skema Interaksi:

- Ketika pengguna terdaftar (PC) meminta sumber daya dari Oracle WebLogic Server (WLS), ia mengirimkan permintaan GET HTTP asli.
- Server Oracle WebLogic Server (WLS) yang menjalankan kode token SPNEGO memerlukan otentikasi dan mengeluarkan 401 Access Ditolak, WWWAuthenticate: Negotiate response.
- Seorang klien (Browser pada PC) meminta tiket sesi dari TGS / KDC (AD).
- TGS / KDC (AD) memberi klien tiket Kerberos yang diperlukan (asalkan klien berwenang), dibungkus dengan token SPNEGO.
- Klien mengirim ulang permintaan GET HTTP + Negosiasi token SPNEGO di header otorisasi: Negosiasi base64 (token).
- Memverifikasi otentikasi web SPNEGO pada server Weblogic melihat header HTTP dengan token SPNEGO. SPNEGO memeriksa token SPNEGO dan mendapatkan informasi pengguna.
- Setelah Weblogic menerima informasi pengguna, itu memvalidasi pengguna di Microsoft Active Directory / KDC. Ketika proses otentikasi selesai, Weblogic mengeksekusi kode Java yang sesuai (servlets, JSP, EJB, dll.) Dan memeriksa otorisasi.
- Kode handler Oracle WebLogic Server Token Handler menerima dan memproses token melalui API GSS, mengautentikasi pengguna, dan merespons dengan URL yang diminta.
Sekarang mari kita berlatih
1. Kami melakukan pengaturan di sisi server dari domain controller di mana layanan TGS / KDC dikonfigurasi.
- Buat pengguna di Direktori Aktif (kata sandi tidak boleh kedaluwarsa)
- Tetapkan SPN yang sesuai untuk nama server WLS
Lakukan verifikasi yang dibuat oleh SPN
setspn –l HTTP_weblogic
harus mengembalikan dua catatan
Hasilkan File Keytab
ktpass -princ HTTP_weblogic@mycompany.com -pass PASSWORD -crypto RC4-HMAC-NT -ptype KRB5_NT_PRINCIPAL -kvno 0 -out c:\krb5.keytab
Salin file ini ke server WLS
2. Pengaturan server WLS
- Anda perlu membuat file krb5.ini di folder% windir%: C: \ Windows. File ini berisi pengaturan konfigurasi untuk klien, misalnya, di mana KDC berada. File akan terlihat seperti ini:
[libdefaults] default_realm = <DOMAIN NAME> ticket_lifetime = 600 [realms] <DOMAIN NAME> = { kdc = <HOSTNAME OF AD/KDC> admin_server = <HOSTNAME OF AD/KDC> default_domain = <DOMAIN NAME> } [domain_realm] . <DOMAIN NAME>= <DOMAIN NAME> [appdefaults] autologin = true forward = true forwardable = true encrypt = true
- Buat file konfigurasi krb5Login.conf:
com.sun.security.jgss.krb5.initiate { com.sun.security.auth.module.Krb5LoginModule required principal="user@MYCOMPANY.COM" useKeyTab=true keyTab=krb5.keytab storeKey=true debug=true; }; com.sun.security.jgss.krb5.accept { com.sun.security.auth.module.Krb5LoginModule required principal="user@MYCOMPANY.COM" useKeyTab=true keyTab=krb5.keytab storeKey=true debug=true; };
Harap dicatat bahwa nama domain harus
huruf besar . Untuk versi sebelumnya, gunakan com.sun.security.jgss.initiate di konfigurasi sebelumnya, bukan com.sun.security.jgss.krb5.initiate.
- File krb5Login.conf dan krb5.keytab harus terletak di root direktori domain server WLS.
- Mengedit file setDomainEnv
Temukan baris set JAVA_OPTIONS =% JAVA_OPTIONS% dan tambahkan di akhir
-Djava.security.auth.login.config=< >\krb5Login.conf -Djavax.security.auth.useSubjectCredsOnly=false -Dweblogic.security.enableNegotiate=true
- Dalam hal ini, kami tidak mempertimbangkan untuk menyiapkan otorisasi WLS dalam AD, kami yakin itu berfungsi, jika Anda perlu mengecat item ini, tulis di komentar.
- Mengkonfigurasi SPNEGO dalam WLS
Untuk melakukan ini, buka Konsol Administrasi Server WebLogic
Pergi ke bagian Realms Keamanan> myrealm> Penyedia dan klik tombol Tambah
Pilih jenis "penyedia Pernyataan Negosiasi Identitas WebLogic"
Periksa apakah kedua parameter tersebut dipilih.

Kami menekan tombol Urutkan Ulang dan mengendalikan panah yang mengatur urutan jenis otorisasi. Di tempat pertama harus diinstal penyedia WebLogic Negotiate Identity Assertion di tempat kedua Penyedia yang melakukan otentikasi LDAP (otorisasi domain)

- Selanjutnya, Anda perlu memberi tahu aplikasi metode otorisasi CLIENT-CERT, perubahan ini diterapkan dalam file web.xml aplikasi
<security-constraint> <display-name>Security Constraint for SSO </display-name> <web-resource-collection> <web-resource-name>My webapp</web-resource-name> <description>Group of Users</description> <url-pattern>/*</url-pattern> <http-method>GET</http-method> <http-method>POST</http-method> </web-resource-collection> <auth-constraint> <role-name>valid-users</role-name> </auth-constraint> </security-constraint> <login-config> <auth-method>CLIENT-CERT</auth-method> </login-config> <security-role> <description>Role description</description> <role-name>valid-users</role-name> </security-role>
Peran harus diinstal sebelumnya dalam sistem. Dalam kasus kami, peran bawaan untuk ADF (pengguna yang valid) digunakan, dan selanjutnya, berdasarkan pada kelompok domain, izin diberikan.
Untuk mengidentifikasi masalah dengan otorisasi, Anda harus mengaktifkan debug. Untuk melakukan ini, buka bagian.
Lingkungan -> Server, pilih server kami -> Debug -> weblogic (perluas) -> Keamanan -> atn, centang kotak dan aktifkan.

Untuk mengaktifkan dan menonaktifkan debug, reboot tidak diperlukan.
Masuk ke mesin domain, klik tautan aplikasi dan masuk tanpa memasukkan kata sandi. Perlu dicatat bahwa tombol Keluar di aplikasi tidak akan berfungsi dalam konfigurasi ini.