后端认证鉴权单点登录【免费下载链接】casApereo CAS - Identity Single Sign On for all earthlings and beyond.项目地址https://gitcode.com/gh_mirrors/ca/cas点击查看免费下载Surrogate 认证又称模拟/代管认证即“Web 版 sudo”允许管理员用户在完成自身凭据校验后以另一个用户surrogate 用户的身份建立单点登录会话。本文聚焦 Apereo CAS 中基于外部 JSON 文件的 Surrogate 账户存储方案讲解 JSON 文件语法、cas.authn.surrogate.json配置属性、通配符授权、热加载机制与测试验证方式帮助读者在 WAR overlay 中快速落地一套纯文件式的模拟账户管理方案。一、JSON 存储在整个 Surrogate 认证体系中的位置在 CAS 中Surrogate 认证涉及两个角色主用户primary admin user其凭据在认证时被真实校验是“发起模拟”的人Surrogate 用户由主用户在登录后选择CAS 在校验完主用户凭据后会切换到该身份并把该身份与单点登录会话绑定。典型使用场景包括以某用户身份登录应用执行操作、以某用户身份排查应用认证问题等。账户存储用于回答“某主用户被允许模拟哪些用户”这一问题。官方文档在 Surrogate-Authentication.md 中列出了 Simple、JSON、LDAP、JDBC、REST、Groovy、Custom 七种存储方式其中JSON 存储是指把“主用户 → 可模拟用户列表”的映射关系写入一个外部 JSON 文件由 CAS 配置指定文件路径后动态读取。多个存储可以同时启用、共同参与定位由ChainingSurrogateAuthenticationService串联JSON 只是其中之一。二、JSON 文件语法与完整示例根据 Surrogate-Authentication-Storage-JSON.mdJSON 文件的顶层是一个对象键为可发起模拟的主用户 ID值为该主用户可模拟的 surrogate 用户名数组。官方给出的最小示例如下{ casuser: [jsmith, banderson], adminuser: [jsmith, tomhanks] }即casuser可以模拟jsmith、bandersonadminuser可以模拟jsmith、tomhanks。仓库自带的真实测试资源 surrogates.json 展示了更完整的形态还包含一个通配符条目{ casuser: [jsmith, banderson], casadmin: [*], adminuser: [jsmith, tomhanks] }其中casadmin: [*]表示casadmin拥有特殊权限可以模拟任意用户详见下文“通配符授权”一节。使用要点值为空数组[]或文件中不存在的主用户在查询可模拟账户时会被视为无任何授权源码中返回空集合文件内容必须是合法的 JSON 对象值必须是字符串数组同一主用户可以出现在多个键之外文件本身不要求去重或排序文件路径通过配置项指定详见下一节。三、启用与配置cas.authn.surrogate.json属性与 JSON 存储相关的全部配置项以cas.authn.surrogate.json为前缀核心是location属性用于指定 JSON 文件的路径。配置示例application.properties# 指定 surrogate 账户定义文件位置支持 classpath 与文件系统路径 cas.authn.surrogate.json.locationfile:/etc/cas/config/surrogates.json在测试环境中官方测试类 JsonResourceSurrogateAuthenticationServiceTests.java 使用 classpath 形式cas.authn.surrogate.json.locationclasspath:/surrogates.json从源码看location 支持两类资源地址file:/absolute/path/surrogates.json部署环境中的绝对路径文件推荐生产使用classpath:/surrogates.json打入 classpath 的资源配置便于测试与快速验证。底层装配条件在 SurrogateAuthenticationConfiguration.java 中JSON 存储以BeanSupplier形式按条件装配当cas.authn.surrogate.json.location未配置时jsonSurrogateAuthenticationService返回nullotherwiseNull()不启用 JSON 存储当 location 已配置时构造JsonResourceSurrogateAuthenticationService并注入到surrogateAuthenticationService聚合链中该模块整体受ConditionalOnFeatureEnabled(feature CasFeatureModule.FeatureCatalog.SurrogateAuthentication)控制。因此只需在 overlay 中引入cas-server-support-surrogate-webflow依赖并设置上述 location 属性即可激活 JSON 账户存储。四、源码实现读取、热加载与查询语义JSON 存储的核心实现类是 JsonResourceSurrogateAuthenticationService.java它继承自SimpleSurrogateAuthenticationService并实现DisposableBean整体设计可以归纳为三个要点1. Jackson 解析文件为内存 Map构造函数通过JacksonObjectMapperFactory构建的ObjectMapper把 JSON 文件直接读取为MapString, ListMAPPER.readValue(json, Map.class)并交给父类持有为eligibleAccounts。这意味着 JSON 文件在启动时被一次性载入内存查询不涉及磁盘 IO。2. 文件监视器实现无重启热加载JsonResourceSurrogateAuthenticationService内置了一个FileWatcherServicethis.watcherService new FileWatcherService(json, this::loadServices); this.watcherService.start(getClass().getSimpleName());loadServices回调会清空并重读账户 MapgetEligibleAccounts().clear(); getEligibleAccounts().putAll(readAccountsFromFile(file));也就是说修改 JSON 文件后无需重启 CAS监视器会自动感知文件变更并刷新内存中的授权数据。服务销毁时destroy()会关闭监视器。这一机制让运维人员可以随时增删模拟授权而不影响在线会话。3. 查询语义继承自 Simple 存储授权判断逻辑位于 SimpleSurrogateAuthenticationService.javacanImpersonateInternal(surrogate, principal, service)若principal.getId()出现在eligibleAccounts中则判断其值列表是否包含目标 surrogate 用户名getImpersonationAccounts(username, service)返回该用户名对应的可模拟账户列表未授权用户返回空列表new ArrayList()。因此 JSON 文件中的键值关系直接决定了“谁可以模拟谁”查询是纯粹的Map命中判断简单且高效。五、通配符授权*SurrogateAuthenticationService接口接口定义定义了通配符常量String WILDCARD_ACCOUNT *;当某个主用户的值列表仅包含*即形如casadmin: [*]时isWildcardedAccount判定其为通配账户default boolean isWildcardedAccount(final CollectionString accounts, final Optional? extends Service service) { return accounts.size() 1 accounts.contains(SurrogateAuthenticationService.WILDCARD_ACCOUNT); }也就是说列表必须恰好只有一个*元素才被识别为通配授权casadmin因而可以模拟任意用户。这是 JSON 存储中赋予“超级管理员”能力的最直接手段。六、模拟会话的认证属性当一次 Surrogate 认证成功后CAS 会向应用回传三个属性用于标识“这是一次模拟会话”见 collectSurrogateAttributes 与 Surrogate-Authentication.md属性含义surrogateEnabled布尔值标识当前会话是否为模拟会话surrogatePrincipal真实校验凭据、发起模拟的管理员用户surrogateUser被模拟的 surrogate 用户下游应用可依据这些属性识别管理员正在以他人身份操作从而进行审计或告警。七、测试验证仓库如何证明 JSON 存储行为仓库为 JSON 存储提供了完整的自动化测试可直接作为行为契约参考测试类 JsonResourceSurrogateAuthenticationServiceTests.java 通过cas.authn.surrogate.json.locationclasspath:/surrogates.json注入配置并装配surrogateAuthenticationServiceBean共享测试基类 BaseSurrogateAuthenticationServiceTests.java 定义了四类断言场景授权通过casuser能查询到非空的模拟账户列表对应文件中的jsmith、banderson授权拒绝unknown-user的模拟账户列表为空定向模拟casuser可模拟banderson但不能模拟未授权用户如XXXX也不能被banderson反向模拟通配模拟casadmin可模拟任意用户且isWildcardedAccount返回true。这些测试同时印证了 JSON 键值映射、*通配语义以及未授权用户的空集合行为。八、REST 协议下的 JSON 存储配合若启用了 CAS REST 协议文档说明Surrogate 认证可扩展到 REST 凭据场景此时 JSON 存储中的授权关系同样生效两种传参方式任选其一将用户名按[surrogate-userid][分隔符][primary-userid]语法格式化提交携带请求头X-Surrogate-Principal其值为 surrogate 用户名。换言之JSON 文件只需维护授权映射实际的“以谁的身份登录”由客户端在登录请求中指定并由 CAS 依据 JSON 存储的授权结果校验放行。九、使用注意事项文件格式严格JSON 必须是合法对象解析失败会导致服务启动或热加载失败建议先本地校验格式路径权限采用file:路径时CAS 进程需对该文件具备读权限且所在目录需允许监视器访问以完成热加载多存储并存JSON、LDAP、JDBC 等存储可同时启用最终由ChainingSurrogateAuthenticationService按顺序聚合判断因此 JSON 存储可与现有目录源共存无需迁移历史授权通配符语义*只有在作为列表中唯一元素时才是通配授权若与其他用户名混用则按普通用户名处理。综上JSON 存储以极低的运维成本提供了可热更新的模拟账户管理能力配合通配符与多存储链适合中小规模部署或作为临时授权方案的快速落地选择。赞分享后端认证鉴权单点登录【免费下载链接】casApereo CAS - Identity Single Sign On for all earthlings and beyond.项目地址https://gitcode.com/gh_mirrors/ca/cas点击查看免费下载相关推荐战略级文档迁移架构语雀Lake到Markdown的无损转换方案战略级文档迁移架构语雀Lake到Markdown的无损转换方案 在知识管理数字化转型的关键阶段企业面临着从封闭格式到开放标准的战略迁移挑战。语雀Lake格式后端认证鉴权单点登录Windows安卓应用安装器5分钟快速上手指南Windows安卓应用安装器5分钟快速上手指南 在Windows电脑上直接运行安卓应用这听起来像是未来科技但现在已经成为现实。APK安装器正是这样一个革命后端认证鉴权单点登录为 Tolaria 的脚本化 HTML 块实现自定义协议tolaria-html-block 打包交付架构解析为 Tolaria 的脚本化 HTML 块实现自定义协议 tolaria html block 打包交付架构解析 Tolaria 是一款基于 Markdown后端认证鉴权单点登录上一篇重温童年记忆用Arduino打造你的专属数字宠物伙伴下一篇智能字幕生成神器一键为视频添加专业级字幕创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
pylibcudf 的 ORC 读写 API 完全指南:从 read_orc 到分块写入 数据分析数据工程机器学习 【免费下载链接】cudf cuDF - GPU DataFrame Library 项目地址: https://gitcode.com/gh_mirrors/cu/cudf 点击查看 免费下载 本篇技术指南以 cuDF 仓库中 pylibcudf 的 ORC(Optimized Row Columnar)格式 I/O 模块… · 2026/9/25 3:55:37
学生时间管理APP全栈开发实战:课程表、番茄钟与数据闭环设计 带过三年毕设项目,被问得最多的一个选题就是“学生时间管理APP”。很多同学第一反应是这个题目太老——课程表、待办事项、番茄钟,网上一抓一大把模板,还能做出什么花来?这话只对了一半。时间管理工具确实不稀奇,但面向… · 2026/9/25 3:55:31
ODAC1120320Xcopy_32bit:可复位Oracle连接基线环境详解 简介:本资源是面向.NET开发者与Oracle数据库运维人员的32位ODAC远程连接环境配置包,专为解决Windows平台下C#、ASP.NET等应用稳定连接Oracle数据库的部署难题。包内含ODAC 11.2.0.3.20核心组件(OLEDB、Oracle Managed Data Access、ASP.NET适… · 2026/9/25 4:23:47
J-Link隐藏技能:用VCOM虚拟串口一根线搞定调试与日志 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 4:23:47
videocache4cj LRU缓存清理策略详解:TotalSize与TotalCount怎么选 videocache4cj LRU缓存清理策略详解:TotalSize与TotalCount怎么选 【免费下载链接】videocache4cj 一个支持边播放边视频缓存库,输入视频的URL就可方便快捷的实现视频边下边播功能 项目地址: https://gitcode.com/Cangjie-TPC/videocache4cj video… · 2026/9/25 4:23:41
Cobalt Strike 4.5部署配置与红队实战避坑指南 简介:Cobalt Strike 4.5是面向渗透测试、红队评估与安全研究的C2框架,支持HTTP/HTTPS/DNS/SMB等多种协议上线主机,内置提权、凭据导出、端口转发、Socket代理、Office攻击、文件捆绑、钓鱼等功能,并可调用Mimikatz等外部工具完成内… · 2026/9/25 4:23:35
宇树G1机器人SSH远程连接与网络调试实战指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 4:23:29
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37