跳到主要内容
版本:0.4.x(Latest)

基本介绍

源码插件通过services.Sessions()读取在线会话视图,动态插件通过plugin.yaml声明service: sessions后使用pluginbridge.Default().Sessions()客户端访问。需要吊销会话时,可信源码插件通过services.Admin().Sessions().RevokeSession执行受管控的管理命令。

能力阶段:运行期

类型支持:源码插件、动态插件

能力设计

会话视图模型

会话视图用于在线用户监控、会话治理和安全审计场景,不暴露会话存储表或JWT内部实现:

字段说明
ID会话领域标识
TenantID当前租户标识
UserIDUsername会话用户
ClientType客户端类型,例如webmobiledesktopcli
DeptName登录时捕获或装配的部门名称
IpBrowserOs登录环境信息
LoginAtLastActiveAt登录时间和最近活跃时间

读写分离设计

会话能力遵循读写分离模式:普通Sessions()提供只读视图能力,Admin().Sessions()提供受管控的写入命令。会话吊销即时影响令牌,吊销后对应令牌应无法继续通过宿主认证中间件。

部门名称视图

DeptName是视图字段,组织能力不可用时可能为空。

接口定义

源码插件接口

入口方法说明
Sessions()SearchSessions按用户名、IP和分页条件搜索可见会话
Sessions()BatchGetSessions批量读取可见会话视图
Admin().Sessions()RevokeSession吊销一个可见在线会话

动态插件接口

动态插件通过hostServices.sessions声明授权的只读方法:

动态方法说明
sessions.search按用户名、IP和分页条件搜索可见会话
sessions.batch_get批量读取可见会话视图

能力使用

源码插件使用

源码插件通过services.Sessions()读取和管理会话,并显式传入领域要求的CapabilityContext

// 搜索在线会话
page, err := services.Sessions().SearchSessions(ctx, capabilityCtx, sessioncap.SearchInput{
Username: keyword,
Page: pageRequest,
})

// 批量读取会话视图
result, err := services.Sessions().BatchGetSessions(ctx, capabilityCtx, sessionIDs)

可信源码插件吊销会话:

err := services.Admin().Sessions().RevokeSession(ctx, capabilityCtx, sessionID)

动态插件使用

动态插件在plugin.yaml中声明sessions服务和授权方法:

hostServices:
- service: sessions
methods:
- sessions.search
- sessions.batch_get

动态插件通过pluginbridge.Default().Sessions()客户端调用:

sessionsSvc := pluginbridge.Default().Sessions()

// 搜索在线会话
page, err := sessionsSvc.SearchSessions(ctx, capabilityCtx, sessioncap.SearchInput{
Username: keyword,
Page: pageRequest,
})

// 批量读取会话视图
result, err := sessionsSvc.BatchGetSessions(ctx, capabilityCtx, sessionIDs)

设计约束

  • 普通能力只读。 会话吊销属于管理命令,不在普通Sessions()中。
  • 缺失结果不透露具体原因。 批量读取不会区分会话不存在、不可见或被拒绝。
  • 部门名称是视图字段。 组织能力不可用时,DeptName可能为空。
  • 会话吊销即时影响令牌。 吊销后对应令牌应无法继续通过宿主认证中间件。

相关服务