@camunda/session-心脏跳动
活动驱动的 Camunda 网络应用程序的会话心跳,其会话由会议管理 Camunda 安全图书馆 (中文(简体) ).
软件包跟踪真正的浏览器活动——指针、键盘、轮子、卷轴和标签
重新获得知名度——并称CSL's POST {basePath}/session/heartbeat 终止点最多一次
间隔,只有在活动实际发生时。 它的存在如此操作、任务列表、优化和任何
未来采纳者共享一个执行,而不是每个重新实施同一个倾听者
节奏逻辑.
背景情况: CDR-0042 — 客户端活动驱动的可配置会话闲置超时。 。 。 .
为什么需要心跳
与 camunda.security.session.heartbeat.enabled=true, CSL 停止处理普通后端流量
作为用户存在的证据 : 仅限 对心跳终点的呼叫延长了会话。 一个东道主
启用旗子时, 前端不会发送心跳, 之后会记录其用户
camunda.security.session.max-inactive-interval然而,它们正在积极地使用该应用程序.
旗帜默认为 false,所以采用这个包是安全的和惰性的,直到一个主机打开.
安装
npm install @camunda/session-heartbeat
react 是一个可选的同伴依赖关系,仅用于 ./react 进入点.
使用量
反应
import {useSessionHeartbeat} from '@camunda/session-heartbeat/react';
function AuthenticatedLayout() {
useSessionHeartbeat({
url: '/session/heartbeat',
csrfToken: () => sessionStorage.getItem('X-CSRF-TOKEN'),
onUnauthorized: () => {
authenticationStore.disableSession();
},
});
return <Outlet />;
}
在应用程序的认证部分内调用一次, 所以在登录后心跳开始
当用户离开时停止。 回拨和 csrfToken 每一个心跳都有新鲜读取,所以
inline 函数不重新启动计时器; 更改 url, (中文(简体) ), intervalMs,或 enabled 已经.
没有反应
import {createSessionHeartbeat} from '@camunda/session-heartbeat';
const stopSessionHeartbeat = createSessionHeartbeat({url: '/session/heartbeat'});
// on teardown
stopSessionHeartbeat();
选项
| 选项 | 类型 | 默认 | 说明 |
|---|---|---|---|
url | string | —— 说 | 心跳终点 一定是当前瞄准镜的 {basePath}/session/heartbeat,包含上下文路径. |
intervalMs | number | 60000 | 活动被检查的频率,因此是两个心跳间最短的间隔. |
csrfToken | string | null | undefined | (() => …) | undefined | CSRF的标志,或者一个得到它。 发送为 X-CSRF-TOKEN; 缺席或空时省略. |
onUnauthorized | () => void | undefined | 当心跳回来时打电话 401 过期的会话,或缺失/出售的CSRF标志. |
onError | (failure: SessionHeartbeatFailure) => void | undefined | 调用网络错误和任何其他非OK响应. |
enabled | boolean (单位:千美元)./react 仅限) | true | 设定 false 使钩子挂起而不发出心跳. |
选择 intervalMs
保持它的好在东道主的 camunda.security.session.max-inactive-interval 一个心跳是什么
重新设置该时钟, 并且一个失败的请求不能花费用户的会话 。 四分之一的面积
配置间隔或小于是拇指的好规则 60s 默认的 CSL 套装 30m 默认.
值得了解的行为
- 终点需要CSRF的标志. 只有 SSL 豁免
/login财务报告和审定财务报表/logout* 免于保护公司社会责任基金, 故有会相POST /session/heartbeat无效X-CSRF-TOKEN被拒绝——与401没有403,因为Webapp链将CSRF的拒绝映射到其认证失败的处理器上. 过csrfToken从应用程序保存的地方. - A 类
401因此表示"这个心跳未被接受",而不是严格意义上的"会话已去". 缺少或陈旧的符号产生与过期会话相同的状态,所以onUnauthorized火灾 在这两种情况下。 这符合Webapp自己的请求层通常如何处理401; 如果为 应用需要将两者区分开来,反应机体携带一个CSRF专用detail。 。 。 . - 开始计数为活动因此,第一个间隔总是发出一个心跳。 这个表面 立即断线, 代价是将废弃的会话延长一个间隔 .
- 每个间隔最多一个心跳,而没有任何时间间隔没有活动。 A 类 心跳也跳过 当前一个还在飞行.
- A 类
401不停止心跳. 消费者决定过期会议的含义; 卸载钩子( 或设置)enabled: false)是何为止. - 每个分页的心跳都是独立的. 他们共享一个会话,所以费用是额外要求 ;没有交叉协调.
- 申请须经过认证 (单位:千美元)
credentials: 'include'),并因被撕毁而中止.
发展
npm run build -w @camunda/session-heartbeat # bundle + type declarations
npm run typecheck -w @camunda/session-heartbeat
npm run test:unit -w @camunda/session-heartbeat # Vitest browser mode
见 会话心跳 输入 用于采用清单和出版步骤的单列文件.