仅限keycloak承载的客户端:它们为什么存在?


10

我试图围绕bearer-onlyKeycloak 的客户概念进行思考。

我了解公开与保密的概念以及服务帐户和相关grant_type=client_credentials内容的概念。但是,使用bearer-only,我被卡住了。

谷歌搜索仅显示讨论的片段,其中说:

您无法通过bearer-only客户端从keycloak获取令牌。

该文档也不清楚。他们只说:

仅承载访问类型意味着应用程序仅允许承载令牌请求。

好的,如果我的应用仅允许承载令牌请求,如果我无法使用客户端ID /客户端机密从Keycloak获取令牌,该如何获取?

而且,如果您无法获得令牌,您还能做什么?为什么这些客户存在?有人可以提供使用此类客户端的示例吗?

Answers:


5

以我的理解,当您有一些内部服务时会使用它。假设您有ServiceAServiceB。用户打个ServiceA电话ServiceBServiceB永远不会由用户直接调用,而仅由其他服务调用。ServiceA将使用用户的凭据获取令牌。然后将使用此令牌进行调用ServiceBServiceB永远不会启动登录。它将仅使用令牌来验证权限。

在这种情况下,ServiceA confidential将成为bearer-only客户端,而ServiceB将成为客户端。


1
因此,这意味着,如果我的客户是仅承载者,那么我唯一可用的选择是向Keycloak发出验证请求,以确保来自的令牌ServiceA有效。对?但是,如果是这种情况,为什么还要致电Keycloak?如果我的客户有公共Keycloak密钥,则可以使用此密钥进行验证,而无需调用Keycloak。
kurtgn

由于令牌范围。服务A的范围应不同于服务B,因此您需要Keycload进行令牌交换
朱利安·

@JulianEgner这是有道理的,除了令牌交换目前处于Tech Preview中,不完全受支持,必须使用Env变量显式打开。是否bearer-only真的只是为了支持尚未准备就绪的用例?
irbull

@irbull您从哪里获得令牌交换将在技术预览中的信息​​?
朱利安·埃格纳

@JulianEgner它被列在他们文档的最底部。在keycloak.org/docs/latest/securing_apps/中列出。它说:“令牌交换是技术预览,不完全受支持。默认情况下禁用此功能。”
irbull

5

仅承载访问类型含义

仅承载访问类型意味着应用程序仅允许承载令牌请求。如果启用此功能,则该应用程序无法参与浏览器登录。

因此,如果您选择客户端,bearer-only则在这种情况下,keycloak适配器将不会尝试对用户进行身份验证,而只会验证承载者令牌。那就是为什么keycloak文档也提到了bearer-only应用程序将不允许从浏览器登录的原因。

而且,如果您无法获得令牌,您还能做什么?为什么这些客户存在?

您的客户端不能在Keycloak服务器上设置为仅承载。但是,您仍然可以在适配器配置上使用仅承载。Keycloak不允许“仅承载”客户端(在服务器上设置客户端时)从服务器获取令牌。尝试在服务器上将客户端更改为“机密”,并在适配器配置(keycloak.json)上设置仅承载。

因此,如果您理解上述陈述,那么在这种情况下,如果您有两个相互通话的微服务,则调用者为confidential,被调用者为bearer-only

还有Keycloak也提到

仅承载用户是永远不会启动登录的Web服务,通​​常用于保护后端。

因此,如果您想使用任何适配器,可以bearer-only根据需要使用


1
感谢Subodh的解释!因此,这意味着如果我的客户是仅承载者,那么我可以使用的唯一选择是向Keycloak发出验证请求,以确保令牌有效。对?但是,如果是这种情况,为什么还要致电Keycloak?如果我的客户有一个公开的Keycloak密钥,则可以使用此密钥进行验证,而无需调用Keycloak。
kurtgn

@kurtgn如果您使用任何适配器,那么只有我建议您使用bearer-only否则将使您的客户端confidential
Subodh Joshi

不,我没有使用适配器,而是用Python进行编码,没有针对Keycloak的特定于python的适配器,因此我必须使用通用OIDC库
kurtgn

您正在与Keycloak + Python集成一起使用哪个库?
Subodh Joshi


0

简短的答案:您无法使用仅承载客户端来获取访问令牌,但是可以获取仅承载客户端可以使用另一个客户端接受的访问令牌。

更多详细信息纯承载客户端有用地表示后端应用程序,例如Web服务,由前端应用程序调用并由授权服务器(= keycloak)保护

后端/ Web服务应用程序不会直接由用户调用,因此它们无法在Oauth2.0用户交互流中播放。设置“仅承载者”可将此事实记录到密钥斗篷服务器上,从而允许管理员在没有其他强制性值的情况下配置客户端(例如重定向uri…),并且如果有人尝试获取此类客户端的令牌,则允许有用的错误消息

但是,这并不意味着您不能为此客户端配置特定角色:因此它需要出现在密钥斗篷领域中。

此外,仅承载客户端需要验证接收到的访问令牌,尤其是,如果激活了此(推荐的)适配器功能“ verify-token-audience”,则仅承载客户端需要验证是否已为其发出访问令牌:仅承载客户端必须在访问令牌的受众属性中:请参阅https://www.keycloak.org/docs/latest/server_admin/index.html#_audience

对于通过keycloak管理的受众,仅承载客户需要在keycloak领域中注册。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.