klienci tylko dla posiadaczy klucza: dlaczego oni istnieją?

10

Próbuję owinąć głowę koncepcją bearer-onlyklientów w Keycloak.

Rozumiem pojęcie konta publicznego kontra poufnego oraz pojęcie kont usługowych i grant_type=client_credentialstakie tam. Ale z bearer-only, utknąłem.

Google ujawnia tylko fragmenty dyskusji mówiące:

Nie można uzyskać tokena od klucza z bearer-onlyklientem.

Dokumenty również są niejasne. Mówią tylko:

Typ dostępu tylko na okaziciela oznacza, że ​​aplikacja zezwala tylko na żądania tokena na okaziciela.

Ok, jeśli moja aplikacja zezwala tylko na żądania tokenów na okaziciela, jak mogę uzyskać ten token, jeśli nie mogę go uzyskać z Keycloak przy użyciu identyfikatora klienta / tajnego klienta?

A jeśli nie możesz zdobyć tokena, co możesz w ogóle zrobić? Dlaczego ci klienci istnieją? Czy ktoś może podać przykład korzystania z tego typu klienta?

kurtgn
źródło

Odpowiedzi:

5

W moim rozumieniu jest on używany, gdy masz jakieś usługi wewnętrzne. Powiedzmy, że masz ServiceAi ServiceB. Użytkownik dzwoni ServiceAw trybie ręcznym ServiceB. ServiceBnigdy nie jest wywoływany przez użytkownika bezpośrednio, tylko przez inne usługi. ServiceAotrzyma token przy użyciu poświadczeń użytkownika. A następnie użyje tego tokena do połączenia ServiceB. ServiceBnigdy nie zainicjuje logowania. Po prostu użyje tokena do weryfikacji uprawnień.

W takim przypadku ServiceA będzie, confidentiala ServiceB bearer-onlyklientami.

Jurij P.
źródło
1
Oznacza to więc, że jeśli mój klient jest tylko na okaziciela, jedyną dostępną opcją jest wysyłanie próśb o weryfikację do Keycloak, aby upewnić się, że token z ServiceAjest prawidłowy. Dobrze? Ale jeśli tak jest, dlaczego w ogóle dzwonić do Keycloak? Jeśli mój klient ma publiczny klucz Keycloak, może go zweryfikować za pomocą tego klucza, nigdy nie dzwoniąc do Keycloak.
kurtgn
Ze względu na zakres tokena. Usługa A powinna mieć zakres inny niż Usługa B, więc potrzebujesz Keycload do wymiany tokena
Julian Egner
@JulianEgner Ma to sens, z wyjątkiem tego, że Token Exchange jest obecnie w wersji zapoznawczej Tech, nie jest w pełni obsługiwany i musi zostać jawnie włączony za pomocą zmiennej Env. Czy bearer-onlynaprawdę jest na miejscu tylko po to, aby obsługiwać ten przypadek użycia, który nie jest jeszcze gotowy?
irbull
@irbull, skąd masz informacje, że wymiana tokenów będzie w podglądzie technologii?
Julian Egner,
@JulianEgner To było wymienione na samym dole ich dokumentów. Na liście keycloak.org/docs/latest/securing_apps/… jest napisane: „Wymiana tokena jest przeglądem technologii i nie jest w pełni obsługiwana. Ta funkcja jest domyślnie wyłączona”.
irbull
5

Znaczenie typu dostępu tylko na okaziciela

Typ dostępu tylko na okaziciela oznacza, że ​​aplikacja zezwala tylko na żądania tokena na okaziciela. Jeśli ta opcja jest włączona, ta aplikacja nie może uczestniczyć w logowaniach przeglądarki.

Jeśli więc wybierzesz swojego klienta bearer-onlyw takim przypadku, adapter keycloak nie będzie próbował uwierzytelnić użytkowników, a jedynie zweryfikuje tokeny nośnika. Dlatego w dokumentacji keycloak wspomnianej również bearer-onlyaplikacji nie można się zalogować z przeglądarki.

A jeśli nie możesz zdobyć tokena, co możesz w ogóle zrobić? Dlaczego ci klienci istnieją?

Twojego klienta nie można ustawić jako serwera tylko na okaziciela na serwerze Keycloak. Nadal możesz jednak używać tylko nośnika w konfiguracji adaptera. Keycloak nie pozwala klientom „tylko na okaziciela” (podczas konfigurowania klienta na serwerze) uzyskiwać tokeny z serwera. Spróbuj zmienić klienta na „poufny” na serwerze i ustaw tylko nośnik w konfiguracji adaptera (keycloak.json).

Więc jeśli zrozumiesz powyższe stwierdzenie, to jeśli masz dwie mikrousługi, które rozmawiają ze sobą w sprawie, osoba dzwoniąca będzie, confidentiala osoba odbierająca będziebearer-only

I Keycloak również wspomniał

Klient tylko na okaziciela to usługa sieciowa, która nigdy nie inicjuje logowania. Zazwyczaj jest używana do zabezpieczenia zaplecza.

Więc jeśli chcesz użyć dowolnego adaptera, którego możesz użyć, bearer-onlyzależy od potrzeby

Subodh Joshi
źródło
1
dzięki Subodh za wyjaśnienie! Oznacza to, że jeśli mój klient jest tylko na okaziciela, jedyną dostępną opcją jest wysyłanie próśb o weryfikację do Keycloak, aby upewnić się, że token jest prawidłowy. Dobrze? Ale jeśli tak jest, dlaczego w ogóle dzwonić do Keycloak? Jeśli mój klient ma publiczny klucz Keycloak, może go zweryfikować za pomocą tego klucza, nigdy nie dzwoniąc do Keycloak.
kurtgn
@kurtgn Jeśli używasz dowolnego adaptera, to tylko ja zasugeruję, aby w bearer-onlyprzeciwnym razie uczynić swojego klientaconfidential
Subodh Joshi
Nie, nie używam adapterów, piszę w Pythonie, nie ma specyficznych dla Pythona adapterów do Keycloak, więc muszę używać ogólnych bibliotek
OIDC
Z jakiej biblioteki korzystasz z Keycloak + Integracja z Python?
Subodh Joshi
0

Krótka odpowiedź: nie można uzyskać tokena dostępu za pomocą klienta tylko na okaziciela, ale można uzyskać token dostępu, który klient tylko na okaziciela może zaakceptować za pomocą innego klienta.

Więcej informacji Klienci tylko na okaziciela użytecznie reprezentują aplikacje zaplecza, takie jak usługa internetowa, wywoływana przez aplikację frontową i zabezpieczona przez serwer autoryzacji (= keycloak)

Aplikacja zaplecza / usługi sieci Web nie jest wywoływana bezpośrednio przez użytkownika, więc nie mogą grać w interaktywnym przepływie użytkownika Oauth2.0. Ustawienie „tylko na okaziciela” dokumentuje ten fakt serwerowi keycloak, pozwalając administratorowi skonfigurować klienta bez obowiązkowych wartości (np. Przekierowanie uri…) i pozwalając na przydatne komunikaty o błędach, jeśli ktoś próbuje uzyskać token dla takiego klienta

Nie oznacza to jednak, że nie można skonfigurować określonych ról dla tego klienta: musi on więc pojawiać się w obszarze klucza.

Ponadto klient tylko na okaziciela musi zweryfikować otrzymany token dostępu, zwłaszcza jeśli ta (zalecana) funkcja adaptera „Veritet token-odbiorców” jest aktywna, klient tylko na okaziciela musi sprawdzić, czy token dostępu został dla niego wydany: klient tylko na okaziciela musi znajdować się w atrybucie odbiorców tokena dostępu: patrz https://www.keycloak.org/docs/latest/server_admin/index.html#_audience

w przypadku odbiorców zarządzanych przez keycloak klienci będący tylko na okaziciela muszą być zarejestrowani w dziedzinie keycloak.

Thomas LIMIN
źródło