在 Keycloak 中使用 OpenID Connect 的两个用例有什么区别? (客户端与应用程序)

What is the difference between the two use cases of using OpenID Connect in Keycloak? (Client vs Application)

我对 SSO 和 Keycloak 的概念很陌生。我正在尝试阅读 Keycloak 的官方文档。在“支持的协议”部分 (https://www.keycloak.org/docs/latest/securing_apps/index.html),文档讨论了像这样使用 OIDC 的两个用例:

"第一个是要求Keycloak服务器为他们验证用户身份的应用程序。成功登录后,应用程序将收到身份令牌和访问令牌。身份令牌包含有关用户的信息,例如用户名、电子邮件和其他个人资料信息。访问令牌由领域进行数字签名,并包含应用程序可用于确定允许用户在应用程序上访问哪些资源的访问信息(如用户角色映射)。

第二种用例是想要访问远程服务的客户端。在这种情况下,客户端要求 Keycloak 获取一个访问令牌,它可以用来代表用户调用其他远程服务。 Keycloak 对用户进行身份验证,然后请求用户同意向请求它的客户端授予访问权限。客户端然后接收访问令牌。此访问令牌由领域进行数字签名。客户端可以使用此访问令牌对远程服务进行 REST 调用。 REST 服务提取访问令牌,验证令牌的签名,然后根据令牌中的访问信息决定是否处理请求。"

我不明白的是:在第一段中它讨论了发出请求的应用程序,在第二段中它讨论了客户端。但是应用程序不是算作客户吗?为什么要具体区分?谁能举出第二部分中谈到的远程服务的例子?

谢谢。

But aren't applications counted as clients? Why the specific differentiation? And can anyone given an example of the remote services that is talked about in the second part?

没错。差异化的原因是因为可能有许多应用程序而不仅仅是这个客户端。而客户端,用户被授权可能想要访问所有其他应用程序的数据。

以 google 生态系统为例。 google 电子邮件是否可以访问驱动器和照片等...虽然它可以开箱即用,但事实并非如此。您需要明确允许电子邮件对那些其他应用程序进行“离线访问”,即使它们都是同一平台的一部分。

Keycloak 理解这一点并提供该术语。但这有点令人困惑,因为这不是考虑它的最佳方式。相反,更好的解释是只有用户和服务客户​​端。服务客户都互相交谈并请求用户的数据。虽然用户可能需要直接进入一个应用程序来获取他们的数据,但其他应用程序也可能需要该用户的数据。

假设您实际上想要允许一项服务从另一项服务请求用户数据,您希望使用支持授权即服务的东西,而不仅仅是身份验证。这有一些例子,例如 PolicyServer and Authress.