klien hanya pembawa keycloak: mengapa mereka ada?


10

Saya mencoba membungkus kepala saya dengan konsep bearer-onlyklien di Keycloak.

Saya memahami konsep publik vs rahasia dan konsep akun layanan dan grant_type=client_credentialshal - hal lainnya. Tapi dengan bearer-only, aku mandek.

Googling hanya mengungkapkan fragmen diskusi yang mengatakan:

Anda tidak dapat memperoleh token dari keycloak dengan bearer-onlyklien.

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?

Jawaban:


5

Dalam pemahaman saya, ini digunakan ketika Anda memiliki beberapa layanan internal. Katakanlah Anda punya ServiceAdan ServiceB. Seorang pengguna menelepon ServiceAyang sedang melakukan panggilan ServiceB. ServiceBtidak pernah dipanggil oleh pengguna secara langsung, hanya oleh layanan lain. ServiceAakan mendapatkan token menggunakan kredensial pengguna. Dan kemudian akan menggunakan token ini untuk menelepon ServiceB. ServiceBtidak akan pernah memulai login. Itu hanya akan menggunakan token untuk memverifikasi izin.

Dalam hal ini, ServiceA akan confidentialdan ServiceB akan menjadi bearer-onlyklien.


1
Jadi ini berarti bahwa jika klien saya hanya menanggung, satu-satunya pilihan yang tersedia bagi saya adalah mengajukan permintaan verifikasi kepada Keycloak untuk memastikan token dari ServiceAitu 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.
kurtgn

Karena ruang lingkup token. Layanan A harus memiliki ruang lingkup selain Layanan B, jadi Anda perlu Keycload untuk pertukaran token
Julian Egner

@JulianEgner Ini masuk akal, kecuali Token Exchange saat ini dalam Tech Preview, tidak sepenuhnya didukung, dan harus diaktifkan secara eksplisit dengan Env Variable. Apakah bearer-onlybenar-benar ada hanya untuk mendukung kasus penggunaan ini yang belum siap?
irbull

@irbull dari mana Anda mendapatkan info bahwa pertukaran token akan ada di pratinjau teknologi?
Julian Egner

@JulianEgner Terdaftar di bagian paling bawah dokumen mereka. Tercantum dalam keycloak.org/docs/latest/securing_apps/… dikatakan "Token Exchange adalah Pratinjau Teknologi dan tidak sepenuhnya didukung. Fitur ini dinonaktifkan secara default."
irbull

5

Arti jenis akses khusus pembawa

Jenis akses khusus pembawa berarti aplikasi hanya memungkinkan permintaan token pembawa. Jika ini diaktifkan, aplikasi ini tidak dapat berpartisipasi dalam login browser.

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 menyebutkan bearer-onlyaplikasi tidak akan mengizinkan login dari browser.

Dan jika Anda tidak dapat memperoleh token, apa yang bisa Anda lakukan? Mengapa klien ini ada?

Klien Anda tidak dapat ditetapkan sebagai pembawa saja di Server Keycloak. Anda masih dapat menggunakan pembawa saja pada konfigurasi adaptor. Keycloak tidak mengizinkan klien "pembawa saja" (saat menyiapkan klien Anda di server) untuk mendapatkan token dari server. Cobalah untuk mengubah klien Anda menjadi "rahasia" di server dan atur pembawa hanya pada konfigurasi adaptor Anda (keycloak.json).

Jadi, jika Anda memahami pernyataan di atas maka jika Anda memiliki dua layanan mikro yang berbicara satu sama lain dalam kasus ini, penelepon akan confidentialdan callee akanbearer-only

Dan Keycloak juga menyebutkan

Satu-satunya klien Bearer adalah layanan web yang tidak pernah memulai login. Ini biasanya digunakan untuk mengamankan back-end.

Jadi jika Anda ingin menggunakan adaptor apa pun yang dapat Anda gunakan bearer-onlytergantung pada kebutuhan


1
terima kasih Subodh atas penjelasan Anda! Jadi ini berarti bahwa jika klien saya hanya menanggung, satu-satunya pilihan yang tersedia bagi saya adalah membuat permintaan verifikasi ke Keycloak untuk memastikan token 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.
kurtgn

@kurtgn Jika Anda menggunakan adaptor apa pun maka hanya saya yang akan menyarankan untuk menggunakan bearer-onlysebaliknya buat klien Andaconfidential
Subodh Joshi

Tidak, saya tidak menggunakan adaptor, saya sedang mengkode dengan Python, tidak ada adaptor khusus-python untuk Keycloak, jadi saya harus menggunakan lib OIDC generik
kurtgn

Pustaka mana yang Anda gunakan dengan Keycloak + Python Integration?
Subodh Joshi


0

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.