Memetakan Klaim JWT ke Wewenang Spring
Pelajari cara server sumber daya mengubah klaim JWT menjadi GrantedAuthorities Spring Security menggunakan JwtAuthenticationConverter untuk pengendalian akses yang terperinci.
Memetakan Klaim JWT ke Wewenang Spring adalah pelajaran Spring Security 6 & JWT Authentication gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Spring Security 6 & JWT Authentication, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Spring Security 6 & JWT Authentication mencakup 4 pelajaran total.
Dari Klaim ke Otoritas
Server sumber daya memvalidasi JWT, tetapi untuk menerapkan kontrol akses, server tersebut memerlukan objek Spring GrantedAuthority. Penghubung antara klaim mentah dan otoritas adalah JwtAuthenticationConverter.
Pemetaan Cakupan Bawaan
Secara bawaan, Spring membaca klaim scope atau scp, memisahkannya berdasarkan spasi, lalu memberi awalan SCOPE_ pada setiap nilai. Jadi, cakupan read menjadi otoritas SCOPE_read.
// scope: 'read write' -> SCOPE_read, SCOPE_writeMemeriksa Otoritas Cakupan
Anda dapat mewajibkan otoritas ini dalam konfigurasi keamanan atau dengan anotasi.
http.authorizeHttpRequests(auth -> auth
.requestMatchers('/api/data').hasAuthority('SCOPE_read'));Masalah dengan Peran
Banyak penyedia identitas menempatkan peran dalam klaim kustom seperti roles atau realm_access.roles, bukan dalam scope. Converter bawaan mengabaikan klaim tersebut, jadi Anda harus menyesuaikannya.
Membangun Converter Kustom
Buat JwtGrantedAuthoritiesConverter dan arahkan ke klaim yang menyimpan peran Anda.
JwtGrantedAuthoritiesConverter c = new JwtGrantedAuthoritiesConverter();
c.setAuthoritiesClaimName('roles');
c.setAuthorityPrefix('ROLE_');Membungkus dalam JwtAuthenticationConverter
Bungkus converter otoritas di dalam JwtAuthenticationConverter, yang menghasilkan token autentikasi akhir.
JwtAuthenticationConverter conv = new JwtAuthenticationConverter();
conv.setJwtGrantedAuthoritiesConverter(c);Mendaftarkan Converter
Beri tahu server sumber daya untuk menggunakan converter Anda di dalam konfigurasi JWT.
http.oauth2ResourceServer(o -> o
.jwt(j -> j.jwtAuthenticationConverter(conv)));Klaim Bersarang
Beberapa penyedia menempatkan peran dalam struktur bersarang, misalnya Keycloak menggunakan realm_access.roles. Converter sederhana tidak dapat membaca jalur bersarang, jadi tulislah converter lambda yang menelusuri struktur tersebut.
Converter<Jwt, Collection<GrantedAuthority>> conv = jwt -> {
Map<String,Object> realm = jwt.getClaim('realm_access');
List<String> roles = (List<String>) realm.get('roles');
return roles.stream()
.map(r -> new SimpleGrantedAuthority('ROLE_' + r))
.collect(Collectors.toList());
};Menggabungkan Cakupan dan Peran
Anda mungkin memerlukan otoritas berbasis cakupan sekaligus berbasis peran. Gabungkan hasil dari dua converter agar satu principal membawa otoritas SCOPE_ dan ROLE_ sekaligus.
Menyesuaikan Nama Principal
Secara bawaan, nama principal adalah klaim sub. Timpa setPrincipalClaimName jika Anda lebih suka mengidentifikasi pengguna berdasarkan, misalnya, preferred_username.
conv.setPrincipalClaimName('preferred_username');Memverifikasi Pemetaan
Uji dengan JWT tiruan yang membawa klaim peran, lalu pastikan permintaan hanya berhasil jika otoritas yang diharapkan tersedia.
mockMvc.perform(get('/api/admin')
.with(jwt().authorities(new SimpleGrantedAuthority('ROLE_admin'))))
.andExpect(status().isOk());Pemeriksaan Singkat
Uji pemahaman Anda tentang pemetaan klaim ke otoritas.
Ringkasan
Anda telah mempelajari cara memetakan klaim JWT ke otoritas Spring:
- Pemetaan bawaan mengubah
scopemenjadi otoritasSCOPE_ - Gunakan
JwtGrantedAuthoritiesConverteruntuk membaca klaim peran kustom - Tulis converter lambda untuk klaim bersarang seperti
realm_access.roles - Daftarkan melalui
jwtAuthenticationConverter
Dengan demikian, server sumber daya Anda memiliki kontrol akses yang tepat berdasarkan klaim.
Belajar Java dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 12
- Pelajaran
- 48
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Memetakan Klaim JWT ke Wewenang Spring” gratis?
Ya — teks lengkap “Memetakan Klaim JWT ke Wewenang Spring” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Spring Security 6 & JWT Authentication, upgrade ke CoddyKit PRO. Kursus Spring Security 6 & JWT Authentication mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Memetakan Klaim JWT ke Wewenang Spring”?
Pelajari cara server sumber daya mengubah klaim JWT menjadi GrantedAuthorities Spring Security menggunakan JwtAuthenticationConverter untuk pengendalian akses yang terperinci. Kamu berlatih Spring Security 6 & JWT Authentication dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Spring Security 6 & JWT Authentication?
Tidak diperlukan pengalaman sebelumnya. Spring Security 6 & JWT Authentication di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Memetakan Klaim JWT ke Wewenang Spring” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Spring Security 6 & JWT Authentication ini?
Ya. Setiap pelajaran Spring Security 6 & JWT Authentication menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Penyiapan Server Sumber Daya
- Mendekode dan Memvalidasi JWT
- Penegakan Cakupan dan Klaim
- Memetakan Klaim JWT ke Wewenang Spring