是否可以配置 Keycloak 将访问令牌/JWT 存储为承载令牌而不是 Cookie?

Dav*_*ley 5 jwt bearer-token keycloak

我对 Keycloak 的理解(可能不正确)是,一旦用户登录并通过身份验证,访问令牌/JWT 就会作为 cookie 存储在浏览器中(默认名称为“kc-access”)。

是否可以配置 keycloak 将访问令牌直接存储为不记名令牌而不是存储在 cookie 中?

询问是因为我希望使用 Keycloak 来保护 Web 应用程序,但是我读过的有关身份验证的大多数资源通常都讨论存储为承载令牌而不是 cookie 的访问令牌。

从 Keycloak 文档中,我看不到任何将访问令牌存储为 Cookie 或不记名令牌的选项 - 我是否误解了 Keycloak 是如何用于为 Web 应用程序提供身份验证的?

Jon*_*den 15

Keycloak 用作单点登录 (SSO) 提供程序。因此,它被设计为与多个组件一起使用。它旨在使用 cookie 在用户浏览器上保持会话打开。此会话是 Keycloak 私有的。然后,身份验证流程向您的应用程序提供用于对用户进行身份验证的令牌。然后,您的应用程序通常会设置自己的 cookie 来为用户建立会话,并避免他们在每个页面上登录。

当您使用 Keycloak 登录时,它会通过在浏览器中存储 cookie 来保持与您的浏览器的会话打开。此会话的长度和其他因素可以在您的领域设置中进行配置。

当您使用 Keycloak 登录另一个应用程序(例如您的 Web 应用程序)时,您可以使用 OpenID Connect(或 SAML)作为协议来对用户进行身份验证,流程类似于以下内容:

  1. 用户的浏览器从您的应用程序重定向到Keycloak,
  2. 它检查用户是否已经有一个会话,如果他们尚未在 keycloak 上登录,则要求他们登录(并创建一个会话)
  3. 使用短暂的代码将用户重定向回您的网络应用程序
  4. 您的应用程序连接到 keycloak 以将代码与令牌交换。
  5. 您的应用程序读取令牌来识别用户,如果需要以使用 OAuth2 的用户身份访问第三方资源,则可能会存储它。
  6. 您的应用程序创建一个会话 cookie 来保持用户的身份验证。

大多数这些步骤应该由库来处理。Keycloak 为流行的框架和服务器(例如 Apache 和 Tomcat)提供了许多 OpenID 适配器。

会话 cookie 可以是任何字符串,只要它们在浏览器和您的应用程序之间是唯一且私有的即可。它们通过请求从浏览器识别用户。不记名令牌通常用于身份验证或连接到无状态服务(例如 API)。

您可以在此处找到有关 OpenID 协议的文档: https: //openid.net/connect/faq/