clientes somente para portadores de keycloak: por que eles existem?

10

Estou tentando bearer-onlyentender o conceito de clientes no Keycloak.

Entendo o conceito de público versus confidencial e o conceito de contas de serviço e grant_type=client_credentialsoutras coisas. Mas com bearer-only, eu estou preso.

O Google só revela fragmentos de discussões dizendo:

Você não pode obter um token do keycloak com um bearer-onlycliente.

Os documentos também não são claros. Tudo o que eles dizem é:

Tipo de acesso apenas ao portador significa que o aplicativo permite apenas solicitações de token do portador.

Ok, se meu aplicativo permite apenas solicitações de tokens ao portador, como obtenho esse token se não consigo obtê-lo no Keycloak usando o id / segredo do cliente?

E se você não pode obter um token, o que você pode fazer? Por que esses clientes existem? Alguém pode fornecer um exemplo do uso desse tipo de cliente?

Kurtgn
fonte

Respostas:

5

No meu entendimento, é usado quando você tem algum serviço interno. Digamos que você tenha ServiceAe ServiceB. Um usuário chama o ServiceAque na mão chama ServiceB. ServiceBnunca é chamado diretamente pelo usuário, apenas por outros serviços. ServiceAreceberá um token usando as credenciais do usuário. E então usará esse token para chamar ServiceB. ServiceBnunca iniciará um login. Apenas usará o token para verificar as permissões.

Nesse caso, ServiceA será confidentiale ServiceB serão bearer-onlyclientes.

Yuriy P
fonte
11
Portanto, isso significa que, se meu cliente for apenas portador, a única opção disponível para mim é fazer solicitações de verificação ao Keycloak para garantir que o token ServiceAseja válido. Direita? Mas se esse for o caso, por que ligar para Keycloak? Se meu cliente tiver uma chave pública Keycloak, ele poderá verificá-la usando essa chave sem precisar chamar Keycloak.
Kurtgn
Por causa do escopo do token. Serviço A deve ter um outro escopo de serviço B, então você precisa Keycload para troca simbólica
Julian Egner
@JulianEgner Isso faz sentido, exceto que o Token Exchange está atualmente no Tech Preview, não é totalmente suportado e deve ser explicitamente ativado com uma Variável Env. Existe bearer-onlyrealmente apenas para suportar esse caso de uso que ainda não está pronto?
irbull
@irbull De onde você tirou as informações de que a troca de token estaria na visualização de tecnologia?
Julian Egner
@ JulianEgner Ele estava listado na parte inferior dos documentos. Listado em keycloak.org/docs/latest/securing_apps/… , diz "O Token Exchange é uma prévia da tecnologia e não é totalmente suportado. Esse recurso está desativado por padrão".
irbull
5

Significado do tipo de acesso apenas ao portador

Tipo de acesso apenas ao portador significa que o aplicativo permite apenas solicitações de token do portador. Se estiver ativado, este aplicativo não poderá participar dos logins do navegador.

Portanto, se você selecionar seu cliente bearer-only, nesse caso, o adaptador de capa de chave não tentará autenticar usuários, mas apenas verificará os tokens do portador. É por isso que a documentação do keycloak também mencionou o bearer-onlyaplicativo não permitirá o logon do navegador.

E se você não pode obter um token, o que você pode fazer? Por que esses clientes existem?

Seu cliente não pode ser definido como portador apenas no Keycloak Server. No entanto, você ainda pode usar apenas portador na configuração do adaptador. O Keycloak não permite que clientes "apenas portadores" (ao configurar seu cliente no servidor) obtenham tokens do servidor. Tente alterar seu cliente para "confidencial" no servidor e defina somente portador na configuração do adaptador (keycloak.json).

Portanto, se você entender a declaração acima, se tiver dois microsserviços que estão conversando entre si, o chamador será confidentiale o chamado serábearer-only

E Keycloak também mencionou

O cliente apenas portador é um serviço da Web que nunca inicia um logon. Geralmente é usado para proteger o back-end.

Portanto, se você quiser usar qualquer adaptador, poderá bearer-onlydepender da necessidade

Subodh Joshi
fonte
11
obrigado Subodh pela sua explicação! Portanto, isso significa que, se meu cliente for apenas portador, a única opção disponível para mim é fazer solicitações de verificação ao Keycloak para garantir que o token seja válido. Direita? Mas se esse for o caso, por que ligar para Keycloak? Se meu cliente tiver uma chave pública Keycloak, ele poderá verificá-la usando essa chave sem precisar chamar Keycloak.
Kurtgn
@kurtgn Se você estiver usando qualquer adaptador só então eu sugiro usar o bearer-onlyde outra forma o seu clienteconfidential
Subodh Joshi
Não, eu não estou usando adaptadores, eu estou codificação em Python, thereare há adaptadores específicos-python para Keycloak, então eu tenho que usar libs OIDC genéricos
kurtgn
Qual biblioteca você está usando com Keycloak + Python Integration?
Subodh Joshi
0

Resposta curta: você não pode obter um token de acesso usando um cliente apenas portador, mas pode obter um token de acesso que um cliente apenas portador pode aceitar usando outro cliente.

Mais detalhes Os clientes somente para portadores representam aplicativos úteis, como serviço da Web, chamados pelo aplicativo frontal e protegidos pelo servidor de autorização (= keycloak)

O aplicativo de serviço de back-end / Web não é chamado diretamente pelo usuário e, portanto, não pode ser reproduzido no fluxo interativo do usuário do Oauth2.0. A configuração de "somente portador" documenta esse fato no servidor de keycloak, permitindo que o administrador configure o cliente sem valores obrigatórios (exemplo, redirecionar uri ...) e permitindo mensagens de erro úteis se alguém tentar obter um token para esse cliente

No entanto, isso não significa que você não pode configurar funções específicas para este cliente: portanto, ele precisa aparecer no domínio do keycloak.

Além disso, o cliente somente portador precisa verificar o token de acesso recebido, especialmente se este recurso (recomendado) do adaptador "público-token-verificação" estiver ativado, o cliente somente portador precisará verificar se o token de acesso foi emitido para ele: o cliente apenas ao portador deve estar no atributo de audiência do token de acesso: consulte https://www.keycloak.org/docs/latest/server_admin/index.html#_audience

para o gerenciamento de público-alvo pelo keycloak, os clientes somente portadores precisam ser registrados no domínio do keycloak.

Thomas LIMIN
fonte