【问题标题】:Is it possible to configure Keycloak to store the access-token/JWT as a Bearer Token instead of as a Cookie?是否可以将 Keycloak 配置为将访问令牌/JWT 存储为承载令牌而不是 Cookie?
【发布时间】:2020-02-02 10:31:03
【问题描述】:

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

是否可以将 keycloak 配置为直接将 access-token 存储为 Bearer Token 而不是 cookie?

询问我是否希望使用 Keycloak 来保护 Web 应用程序,但是我在 Authentication 上阅读的大多数资源通常都讨论存储为承载令牌而不是 cookie 的访问令牌。

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

【问题讨论】:

  • 您能否确认一下 - 登录后,您会得到一个名为“kc-access”的 cookie,其中包含一个令牌?它是否包含 access_token 或 refresh_token?我得到了两个 cookie(在我的 keycloak IP 下),名为 KC_RESTART 和 KEYCLOAK_IDENTITY,它们都包含一些令牌,但都没有 access_token 和 refresh_token。

标签: jwt keycloak bearer-token


【解决方案1】:

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/

【讨论】:

    猜你喜欢
    • 2022-01-15
    • 2015-09-15
    • 2016-09-13
    • 1970-01-01
    • 2018-07-14
    • 2021-10-16
    • 2020-05-25
    • 2018-12-18
    • 2019-09-19
    相关资源
    最近更新 更多