Bagaimana penyedia JACC dapat menggunakan fasilitas pemetaan Principal-to-role dari server yang digunakan?

154

Saya menulis JACCpenyedia.

Sepanjang jalan, ini berarti menerapkan a PolicyConfiguration.

The PolicyConfigurationbertanggung jawab untuk menerima informasi konfigurasi dari server aplikasi, seperti yang izin diperoleh yang peran. Ini agar Policynantinya dapat membuat keputusan otorisasi ketika memberikan informasi tentang pengguna saat ini dan apa yang dia coba lakukan.

Namun, itu bukan bagian dari PolicyConfigurationkontrak (mengerikan) untuk mempertahankan pemetaan antara peran dan izin mereka, dan Principalsyang ditugaskan untuk peran itu.

Biasanya - selalu, sungguh - server aplikasi merumahkan pemetaan ini. Misalnya, pada Glassfish, Anda memengaruhi pemetaan ini dengan memasok hal-hal seperti sun-web.xmldan sun-ejb-jar.xmldan seterusnya dengan modul Java EE Anda. (File khusus vendor ini bertanggung jawab untuk mengatakan, misalnya, superusersadalah grup yang akan ditugaskan peran aplikasi admins.)

Saya ingin menggunakan kembali fungsionalitas yang disediakan file-file ini, dan saya ingin melakukannya untuk sebanyak mungkin server aplikasi.

Inilah - benar-benar sewenang-wenang - IBM mengambil masalah ini, yang tampaknya mengkonfirmasi kecurigaan saya bahwa apa yang ingin saya lakukan pada dasarnya tidak mungkin . (Lebih banyak amunisi untuk kasus saya bahwa kontrak Java EE khusus ini tidak sebanding dengan kertas yang dicetak.)

Pertanyaan saya: bagaimana saya mendapatkan informasi pemetaan pokok-ke-peran ini di - sebagai permulaan - Glassfish dan JBoss dari dalam PolicyConfiguration? Jika ada cara standar untuk melakukannya yang tidak saya sadari, saya semua tahu.

Laird Nelson
sumber
7
Sudahkah Anda membuat kemajuan dalam masalah ini? Saya ingin menulis penyedia JACC juga, dan juga penyedia otentikasi JASPIC untuk membangun aplikasi web portabel ...
perissf
Ini kedengarannya juga tidak terlalu menjanjikan: Because JSR-115 does not define how to address role mapping, WebLogic JACC classes are used for role-to-principal mapping.Lihat docs.oracle.com/cd/E24329_01/web.1211/e24485/…
Arjan Tijms
2
Menurut saya, saat ini adalah Anda harus selalu memastikan penyedia JACC Anda digabungkan ke penyedia JASPIC yang karenanya Anda juga harus menulis. Saya belum menempuh rute ini tetapi masih di meja saya untuk mencoba.
Laird Nelson
@ LairdNelson, jika Anda punya waktu, Anda mungkin harus menulis jawaban di sekitar komentar JASPIC Anda. Ini kedengarannya menjanjikan, dan ada 300 reputasi yang dihargai untuk pertanyaan ini.
jimhark
5
Hai; tidak berusaha membuat siapa pun dalam ketegangan. :-) Saya tidak punya jawaban di sini bahwa saya bisa cepat-cepat menyiapkan. Saya hanya ingat Ron Monzillo menasihati saya bahwa satu-satunya cara untuk mendapatkan penugasan pokok-ke-peran "menjadi" penyedia JACC dengan cara yang dapat dimengerti adalah dengan menerapkan implementasi JASPIC secara efektif.
Laird Nelson

Jawaban:

3

Jawaban singkatnya adalah: tidak ada cara standar untuk melakukannya.

Meskipun Glassfish dan JBoss mendukung pemetaan pokok-ke-peran, JACC tidak menganggap semua wadah berfungsi, dan karenanya mendelegasikan tanggung jawab menjaga pemetaan tersebut ke implementasi penyedia JACC. Dari dokumen (lihat: PolicyConfiguration.addToRolemetode ):

Merupakan tugas penyedia Kebijakan untuk memastikan bahwa semua izin yang ditambahkan ke peran diberikan kepada prinsipal "yang dipetakan ke peran".

Dengan kata lain, Anda perlu menerapkannya sendiri di dalam penyedia JACC Anda untuk setiap wadah. Untuk JBoss, misalnya, Anda bisa menggunakan salah satu subclass dari AbstractRolesMappingProvider.

Diego
sumber
Selain itu, penyedia portabel dapat memilih untuk mengabaikan pemetaan peran kontainer; misalnya dapat berasumsi bahwa prinsipal apa pun menyiratkan peran aplikasi dengan nama yang sama, kecuali aplikasi tersebut entah bagaimana (melalui yang PolicyContextHandlerkhusus terdaftar oleh penyedia untuk tujuan itu, misalnya) menyampaikan sebaliknya. Penyedia lain juga bisa mengabaikan gagasan peran sama sekali (dan karenanya wadah-disediakan PolicyConfiguration), bukannya beroperasi hanya pada pemetaan prinsip-ke-izin (disediakan aplikasi) (dan di mana izin tersebut tidak perlu terbatas pada yang JACC).
Uux
Catatan sisi # 2: Pada Java EE 8, pemetaan grup-ke-peran 1: 1 telah menjadi standar baru (yang bagaimanapun hanya membuat kita setengah jalan di sana, karena peran masih harus dinyatakan secara statis di muka - dengan asumsi tidak ada penyedia JACC kustom berlaku).
Uux