6.4. 离线访问


离线访问 登录过程中,客户端应用程序请求离线令牌,而不是刷新令牌。客户端应用保存此离线令牌,并在用户注销时将其用于将来的登录。如果您的应用程序需要代表用户执行离线操作,即使用户没有在线,这个操作也很有用。例如,常规数据备份。

客户端应用程序负责将离线令牌保留在存储中,然后使用它从红帽构建的 Keycloak 服务器检索新的访问令牌。

刷新令牌和离线令牌之间的区别是离线令牌永远不会过期,且不会受到 SSO Session Idle timeout 和 SSO Session Max lifespan 的影响。用户退出后,离线令牌有效。您必须每 30 天或 Offline Session Idle 指定的天数使用离线令牌进行刷新令牌操作。

如果您启用 离线会话 Max Limited,则离线令牌会在 60 天后过期,即使您使用离线令牌操作进行刷新令牌操作。您可以在管理门户中更改这个值 Offline Session Max

使用离线访问时,客户端闲置和最大超时可以在 客户端级别上 覆盖。客户端 高级设置 选项卡中的 Client Offline Session IdleClient Offline Session Max 的选项允许您为特定应用程序有一个较短的离线超时。请注意,客户端会话值也控制刷新令牌过期,但它们不会影响全局离线用户 SSO 会话。只有在 realm 级别中 Offline Session Max Limited 被设置为 Enabled 时,选项 Client Offline Session Max 才会被评估。

如果启用 Revoke Refresh Token 选项,则只能使用每个离线令牌一次。刷新后,您必须从刷新响应中存储新的离线令牌,而不是存储在上一个令牌。

用户可以查看和撤销红帽构建的 Keycloak 授权在用户帐户 控制台中的离线令牌。管理员可以在 Consents 选项卡中为 Admin Console 中的单个用户撤销离线令牌。管理员可以查看每个客户端离线 访问 选项卡中发布的所有离线令牌。管理员可以通过设置 撤销策略 来撤销离线令牌。

要发布离线令牌,用户必须具有 realm-level offline_access 角色的角色映射。客户端还必须在其范围内具有该角色。客户端必须添加 offline_access 客户端范围作为 可选客户端范围 到角色,这默认完成。

在向红帽构建的 Keycloak 发送授权请求时,客户端可以通过添加参数 scope=offline_access 来请求离线令牌。当您使用它来访问应用程序的安全 URL (如 http://localhost:8080/customer-portal/secured?scope=offline_access)时,Red Hat build of Keycloak OIDC 客户端适配器会自动添加此参数。如果您在身份验证请求正文中包含 scope=offline_access,则 Direct Access Grant 和 Service Accounts 支持离线令牌。

默认情况下,Red Hat build of Keycloak 会将其内部缓存限制为离线用户和离线客户端会话,这样可减少离线会话的总内存用量。根据需要,从内存驱除的项目将从数据库按需加载。要为缓存设置不同的大小,请编辑 Keycloak 的缓存配置文件,为这些缓存设置 < memory max-count="..."/& gt;。

如果您禁用了 persistent-user-sessions 功能,可以使用配置选项降低内存要求,以缩短导入离线会话的时间。此类会话将在指定的生命周期之后从 Infinispan 缓存中驱除,但仍然在数据库中可用。这将降低内存消耗,特别是对于有大量离线会话的部署。

要为离线用户会话指定 lifespan 覆盖,请使用以下参数启动红帽构建的 Keycloak 服务器:

--spi-user-sessions-infinispan-offline-session-cache-entry-lifespan-override=<lifespan-in-seconds>

对于离线客户端会话,类似:

--spi-user-sessions-infinispan-offline-client-session-cache-entry-lifespan-override=<lifespan-in-seconds>
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.