我对Keycloak的理解(可能不正确(是,一旦用户登录并经过身份验证,访问令牌/JWT就会作为cookie存储在浏览器中(默认名称为"kc-access"(。
是否可以将 keycloak 配置为将访问令牌直接存储为持有者令牌而不是存储在 cookie 中?
询问我希望使用 Keycloak 来保护 Web 应用程序,但是我阅读的有关身份验证的大多数资源通常都涉及存储为持有者令牌而不是 cookie 的访问令牌。
从 Keycloak 文档中,我看不到任何提及将访问令牌存储为 Cookie 或持有者令牌的选项 - 我是否误解了 Keycloak 如何用于为 Web 应用程序提供身份验证?
Keycloak 用作单点登录 (SSO( 提供程序。因此,它被设计为与多个组件一起使用。它旨在使用 cookie 在用户的浏览器上保持会话打开。此会话是 Keycloak 专用的。然后,身份验证流为应用程序提供对用户进行身份验证的令牌。然后,您的应用程序通常会设置自己的cookie,以便为用户建立会话,并避免他们在每个页面上登录。
当您使用 Keycloak 登录时,它会通过在那里存储一个 cookie 来保持与您的浏览器的会话打开。此会话的长度和其他因素可在您的领域设置中配置。
当您使用 Keycloak 登录到另一个应用程序(例如您的 Web 应用程序(时,您可以使用 OpenID Connect(或 SAML(作为协议,通过类似于以下内容的流程对用户进行身份验证:
- 用户的浏览器从您的应用程序重定向到 Keycloak,
- 检查用户是否已经有会话,如果他们尚未登录KeyCloak,则要求他们登录(并创建会话(
- 使用短期代码将用户重定向回 Web 应用
- 应用程序连接到 keycloak 以将代码与令牌交换。
- 应用程序读取令牌以标识用户,如果需要使用 OAuth2 以用户身份访问第三方资源,则可能会存储令牌。
- 应用程序会创建一个会话 Cookie 来保持用户进行身份验证。
这些步骤中的大多数应由库处理。Keycloak为流行的框架和服务器提供了许多OpenID适配器,如Apache和Tomcat。
会话 Cookie 可以是任何字符串,只要它们在浏览器和应用程序之间是唯一且私有的。它们跨请求从浏览器中识别用户。持有者令牌通常用于进行身份验证或连接到无状态服务,例如 API。
您可以在此处找到有关 OpenID 协议的文档:https://openid.net/connect/faq/。