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

时间:2019-10-04 05:26:17

标签: jwt keycloak bearer-token

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

是否可以配置密钥斗篷而不是将访问令牌直接存储为Bearer令牌,而不是存储在cookie中?

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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

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

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