Saya mencoba membungkus kepala saya dengan konsep bearer-only
klien di Keycloak.
Saya memahami konsep publik vs rahasia dan konsep akun layanan dan grant_type=client_credentials
hal - hal lainnya. Tapi dengan bearer-only
, aku mandek.
Googling hanya mengungkapkan fragmen diskusi yang mengatakan:
Anda tidak dapat memperoleh token dari keycloak dengan
bearer-only
klien.
Dokumen juga tidak jelas. Yang mereka katakan adalah:
Jenis akses khusus pembawa berarti aplikasi hanya memungkinkan permintaan token pembawa.
Oke, jika aplikasi saya hanya mengizinkan permintaan token pembawa, bagaimana cara saya mendapatkan token ini jika saya tidak bisa mendapatkannya dari Keycloak menggunakan id klien / rahasia klien?
Dan jika Anda tidak dapat memperoleh token, apa yang bisa Anda lakukan? Mengapa klien ini ada? Adakah yang bisa memberikan contoh menggunakan jenis klien ini?
ServiceA
itu valid. Baik? Tetapi jika ini masalahnya, mengapa memanggil Keycloak? Jika klien saya memiliki kunci Keycloak publik, ia dapat memverifikasinya menggunakan kunci ini tanpa pernah memanggil Keycloak.bearer-only
benar-benar ada hanya untuk mendukung kasus penggunaan ini yang belum siap?Arti jenis akses khusus pembawa
Jadi, jika Anda memilih klien sebagai
bearer-only
maka dalam kasus itu adaptor keycloak tidak akan mencoba untuk mengotentikasi pengguna, tetapi hanya memverifikasi token pembawa. Itu sebabnya dokumentasi keycloak juga menyebutkanbearer-only
aplikasi tidak akan mengizinkan login dari browser.Dan jika Anda tidak dapat memperoleh token, apa yang bisa Anda lakukan? Mengapa klien ini ada?
Jadi, jika Anda memahami pernyataan di atas maka jika Anda memiliki dua layanan mikro yang berbicara satu sama lain dalam kasus ini, penelepon akan
confidential
dan callee akanbearer-only
Dan Keycloak juga menyebutkan
Jadi jika Anda ingin menggunakan adaptor apa pun yang dapat Anda gunakan
bearer-only
tergantung pada kebutuhansumber
bearer-only
sebaliknya buat klien Andaconfidential
Jawaban singkat: Anda tidak dapat memperoleh token akses menggunakan klien hanya pembawa, tetapi Anda dapat memperoleh token akses yang hanya bisa diterima oleh klien pembawa saja menggunakan klien lain.
Lebih detail klien pembawa saja mewakili aplikasi back-end, seperti layanan web, dipanggil oleh aplikasi depan dan diamankan oleh server otorisasi (= keycloak)
Aplikasi layanan Backend / Web tidak dipanggil secara langsung oleh pengguna, sehingga mereka tidak dapat bermain dalam aliran interaktif pengguna Oauth2.0. Menyetel "hanya pembawa" mendokumentasikan fakta ini ke server keycloak, memungkinkan administrator untuk mengonfigurasi klien tanpa nilai wajib lainnya (misalnya, redirect uri ...) dan memungkinkan pesan kesalahan yang bermanfaat jika seseorang mencoba mendapatkan token untuk klien semacam itu
Namun, ini tidak berarti Anda tidak dapat mengonfigurasi peran spesifik untuk klien ini: jadi itu harus muncul di ranah keycloak.
Selain itu, klien hanya pembawa yang perlu memverifikasi token akses yang diterima, terutama, jika fitur adaptor ini (merekomendasikan) "verifikasi-token-audiens" diaktifkan, klien hanya pembawa perlu memverifikasi bahwa token akses telah dikeluarkan untuk itu: klien hanya pembawa harus berada dalam atribut audiens dari token akses: lihat https://www.keycloak.org/docs/latest/server_admin/index.html#_audience
untuk pemirsa yang mengelola oleh keycloak, klien hanya pembawa harus terdaftar di ranah keycloak.
sumber