Otorisasi transparan untuk aplikasi di Oracle Weblogic Server

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:



  1. Ketika pengguna terdaftar (PC) meminta sumber daya dari Oracle WebLogic Server (WLS), ia mengirimkan permintaan GET HTTP asli.
  2. Server Oracle WebLogic Server (WLS) yang menjalankan kode token SPNEGO memerlukan otentikasi dan mengeluarkan 401 Access Ditolak, WWWAuthenticate: Negotiate response.
  3. Seorang klien (Browser pada PC) meminta tiket sesi dari TGS / KDC (AD).
  4. TGS / KDC (AD) memberi klien tiket Kerberos yang diperlukan (asalkan klien berwenang), dibungkus dengan token SPNEGO.
  5. Klien mengirim ulang permintaan GET HTTP + Negosiasi token SPNEGO di header otorisasi: Negosiasi base64 (token).
  6. Memverifikasi otentikasi web SPNEGO pada server Weblogic melihat header HTTP dengan token SPNEGO. SPNEGO memeriksa token SPNEGO dan mendapatkan informasi pengguna.
  7. 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.
  8. 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)


  • Nyalakan ulang server

  • 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.

  • Debug

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.

  • Kami me-reboot server untuk menerapkan perubahan konfigurasi.
  • Menyebarkan aplikasi dengan metode otorisasi yang dimodifikasi (web.xml baru)
  • Untuk menonaktifkan jenis otorisasi untuk konsol administratif ini, buat perubahan berikut% Ora_Home% \ wlserver \ server \ lib \ consoleapp \ webapp \ WEB-INF \ web.xml.

    Ubah jalurnya

      <auth-method>CLIENT-CERT,FORM</auth-method>  <auth-method>FORM</auth-method> 

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.

Source: https://habr.com/ru/post/id414939/


All Articles