keycloak client solo per portatori: perché esistono?


10

Sto cercando di avvolgere la mia testa attorno al concetto di bearer-onlyclienti in Keycloak.

Comprendo il concetto di pubblico vs confidenziale e il concetto di account di servizio e grant_type=client_credentialsroba del genere. Ma con bearer-only, sono bloccato.

Google cerca solo frammenti di discussioni che dicono:

Non è possibile ottenere un token dal keycloak con un bearer-onlyclient.

Anche i documenti non sono chiari. Tutto quello che dicono è:

Il tipo di accesso solo al portatore indica che l'applicazione consente solo richieste di token al portatore.

Ok, se la mia app consente solo richieste di token al portatore, come posso ottenere questo token se non riesco a ottenerlo da Keycloak usando ID client / segreto client?

E se non riesci a ottenere un token, cosa puoi fare? Perché esistono questi client? Qualcuno può fornire un esempio di utilizzo di questo tipo di client?

Risposte:


5

A mio avviso, viene utilizzato quando si dispone di un servizio interno. Diciamo che hai ServiceAe ServiceB. Un utente chiama ServiceAche in mano chiama ServiceB. ServiceBnon viene mai chiamato direttamente dall'utente, solo da altri servizi. ServiceAotterrà un token utilizzando le credenziali dell'utente. E quindi utilizzerà questo token per chiamare ServiceB. ServiceBnon avvierà mai un login. Utilizzerà semplicemente il token per verificare le autorizzazioni.

In questo caso, ServiceA sarà confidentiale ServiceB sarà bearer-onlyclient.


1
Ciò significa che se il mio client è solo al portatore, l'unica opzione disponibile per me è fare richieste di verifica a Keycloak per assicurarsi che il token da ServiceAsia valido. Giusto? Ma se è così, perché chiamare Keycloak? Se il mio client ha una chiave Keycloak pubblica, può verificarla utilizzando questa chiave senza mai chiamare Keycloak.
Kurtgn,

A causa dell'ambito token. Il servizio A dovrebbe avere un ambito diverso da quello del servizio B, quindi è necessario Caricare i tasti per lo scambio di token
Julian Egner,

@JulianEgner Questo ha senso, tranne per il fatto che Token Exchange è attualmente in Anteprima tecnica, non completamente supportato e deve essere esplicitamente attivato con una variabile Env. Esiste bearer-onlydavvero solo per supportare questo caso d'uso che non è ancora pronto?
Irbull,

@irbull dove hai preso le informazioni che lo scambio di token sarebbe in anteprima tecnologica?
Julian Egner,

@JulianEgner Era elencato in fondo ai loro documenti. Elencato in keycloak.org/docs/latest/securing_apps/… dice "Lo scambio di token è l'anteprima della tecnologia e non è completamente supportato. Questa funzione è disabilitata per impostazione predefinita."
Irbull,

5

Significato del tipo di accesso solo al portatore

Il tipo di accesso solo al portatore indica che l'applicazione consente solo richieste di token al portatore. Se questa opzione è attivata, questa applicazione non può partecipare agli accessi al browser.

Quindi, se selezioni il tuo client come bearer-onlyallora, in questo caso l'adattatore keycloak non tenterà di autenticare gli utenti, ma verificherà solo i token al portatore. Questo perché la documentazione di keycloak menzionava anche l' bearer-onlyapplicazione non consentirà l'accesso dal browser.

E se non riesci a ottenere un token, cosa puoi fare? Perché esistono questi client?

Il tuo client non può essere impostato come solo al portatore sul Keycloak Server. Tuttavia, è ancora possibile utilizzare solo bearer sulla configurazione dell'adattatore. Keycloak non consente ai client "solo al portatore" (durante l'impostazione del client sul server) di ottenere i token dal server. Prova a cambiare il tuo client in "confidenziale" sul server e imposta solo il portatore sulla configurazione dell'adattatore (keycloak.json).

Quindi, se capisci la frase sopra, allora se hai due microservizi che parlano tra loro nel caso, il chiamante sarà confidentiale il chiamante saràbearer-only

E anche Keycloak ha menzionato

I client solo al portatore sono servizi Web che non avviano mai un accesso. In genere vengono utilizzati per proteggere il back-end.

Quindi, se si desidera utilizzare qualsiasi adattatore, è possibile utilizzare bearer-onlydipende dalla necessità


1
grazie Subodh per la tua spiegazione! Ciò significa che se il mio client è solo al portatore, l'unica opzione disponibile per me è fare richieste di verifica a Keycloak per assicurarsi che il token sia valido. Giusto? Ma se è così, perché chiamare Keycloak? Se il mio client ha una chiave Keycloak pubblica, può verificarla utilizzando questa chiave senza mai chiamare Keycloak.
Kurtgn,

@kurtgn Se si utilizza un adattatore, solo io suggerirò di utilizzare il bearer-onlyclient altrimenti resoconfidential
Subodh Joshi

No, non sto usando adattatori, sto programmando in Python, non ci sono adattatori specifici per Python per Keycloak, quindi devo usare librerie OIDC generiche
kurtgn,

Quale libreria stai usando con Keycloak + Python Integration?
Subodh Joshi


0

Risposta breve: non è possibile ottenere un token di accesso utilizzando un client solo al portatore, ma è possibile ottenere un token di accesso che un client solo al portatore può accettare utilizzando un altro client.

Maggiori dettagli I client solo al portatore rappresentano utilmente applicazioni di back-end, come il servizio Web, richiamate dall'applicazione frontale e protette dal server di autorizzazione (= keycloak)

Le applicazioni di back-end / servizi Web non vengono chiamate direttamente dall'utente, pertanto non possono essere riprodotte nel flusso interattivo dell'utente Oauth2.0. L'impostazione di "solo portatore" documenta questo fatto sul server keycloak, consentendo all'amministratore di configurare il client senza valori altrimenti obbligatori (ad esempio reindirizzamento uri ...) e consentendo utili messaggi di errore se qualcuno cerca di ottenere un token per tale client

Tuttavia, ciò non significa che non è possibile configurare ruoli specifici per questo client: è necessario che appaia nel regno keycloak.

Inoltre, il client solo al portatore deve verificare il token di accesso ricevuto, in particolare, se questa funzione dell'adattatore "consigliato-audience-token" è attivata, il client solo al portatore deve verificare che il token di accesso sia stato emesso per esso: il client solo al portatore deve essere nell'attributo audience del token di accesso: consultare https://www.keycloak.org/docs/latest/server_admin/index.html#_audience

per la gestione del pubblico tramite keycloak, i clienti solo al portatore devono essere registrati nel regno keycloak.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.