元数据持久化到 JDBC 关系数据库)
后端认证鉴权单点登录【免费下载链接】casApereo CAS - Identity Single Sign On for all earthlings and beyond.项目地址https://gitcode.com/gh_mirrors/ca/cas点击查看免费下载本篇技术指南聚焦 Apereo CAS 中 SAML2 委托认证Delegated Authentication的一项存储能力把 CAS 作为 SAML2 服务提供商Service ProviderSP时自动生成的元数据Metadata从默认的文件系统迁移到关系型数据库中进行管理与读写。读完本文你将掌握启用该功能所需的依赖模块、功能开关、完整属性配置、建表 SQL 以及底层实现原理并了解如何通过 CAS 提供的 HTTP 端点验证元数据是否真正落库。为什么需要把 SP 元数据存入数据库在 SAML2 委托认证场景下CAS 会以 SAML2 SP 的身份向外部身份提供商IdP如 Okta、Azure AD 等发起认证请求此时 CAS 自身需要维护一份描述自身实体Entity信息的 SP 元数据包括 entityID、证书与签名配置等。默认情况下这份元数据由 CAS 生成并存放于文件系统对应fileSystem存储配置。但在多节点部署、容器化或云环境下文件系统是典型的有状态组件每次节点启动时重新生成的元数据可能与 IdP 侧已注册的证书不一致导致认证失败。将元数据持久化到共享的关系数据库后所有 CAS 节点读取同一份元数据从根本上解决了多实例间元数据漂移的问题。CAS 官方在配置模型中将 SP 元数据的存储后端抽象为四类见 Pac4jSamlServiceProviderMetadataProperties.java文件系统fileSystem、MongoDBmongo、关系数据库jdbc与 Amazon S3amazonS3本文重点讲解其中的jdbc分支。第一步引入依赖模块要启用 JDBC 存储需要在 CAS Overlay 中引入 JPA 工具模块implementation org.apereo.cas:cas-server-support-jpa-util该模块为 CAS 提供JpaBeanFactory与JpaBeans等基础能力用于创建数据源DataSource与JdbcTemplate。从源码上看负责装配的 DelegatedAuthenticationSaml2JdbcConfiguration.java 通过ConditionalOnClass(JpaBeanFactory.class)仅在类路径中存在该工厂类时才生效这正是引入cas-server-support-jpa-util后配置类才会被激活的原因。第二步打开功能开关JDBC 元数据存储属于需要显式启用的特性分支通过CasFeatureModule特性开关控制。请确保在 CAS 配置中包含CasFeatureModule.DelegatedAuthentication.saml-jdbc.enabledtrue源码中对应的开关条件为 DelegatedAuthenticationSaml2JdbcConfiguration.java 上的注解ConditionalOnFeatureEnabled(feature CasFeatureModule.FeatureCatalog.DelegatedAuthentication, module saml-jdbc, enabledByDefault false)注意enabledByDefault false即该特性默认关闭必须显式开启集成测试 DelegatedSaml2ClientMetadataJdbcTests.java 中同样以CasFeatureModule.DelegatedAuthentication.saml-jdbc.enabledtrue作为测试前置条件。第三步配置 JDBC 存储属性所有相关属性位于cas.authn.pac4j.saml[].metadata.service-provider.jdbc.*命名空间下saml[]表示支持按索引配置多个 SAML2 委托客户端。除tableName之外其余连接参数全部继承自通用的 JPA 属性基类 AbstractJpaProperties.java属性是否必填默认值说明table-name必填无存放 SP 元数据的表名该表必须预先手工创建url必填jdbc:hsqldb:mem:cas-hsql-database数据库连接 URL支持 SpEL 表达式user必填sa数据库用户名需具备表读写权限password必填空数据库密码driver-class必填org.hsqldb.jdbcDriverJDBC 驱动类dialect可选org.hibernate.dialect.HSQLDialect数据库方言用于生成/校验 DDL 与 DMLddl-auto可选updateHibernate 对 schema 的处理策略validate/update/create/create-drop/noneauto-commit可选—连接是否自动提交事务idle-timeout可选PT10M连接池中连接的最大空闲时间connection-timeout可选PT30S获取连接的最大等待时间tableName在 Pac4jSamlServiceProviderMetadataJdbcProperties.java 中被标记为RequiredProperty未配置会导致配置校验失败。文档中对应的属性查询入口为cas.authn.pac4j.saml[].metadata.service-provider.jdbc.*。以 PostgreSQL 为例完整的配置片段取自仓库集成测试 DelegatedSaml2ClientMetadataJdbcTests.java可直接套用cas.authn.pac4j.saml[0].metadata.service-provider.jdbc.auto-committrue cas.authn.pac4j.saml[0].metadata.service-provider.jdbc.table-namesp_metadata cas.authn.pac4j.saml[0].metadata.service-provider.jdbc.urljdbc:postgresql://localhost:5432/saml cas.authn.pac4j.saml[0].metadata.service-provider.jdbc.userpostgres cas.authn.pac4j.saml[0].metadata.service-provider.jdbc.passwordpassword cas.authn.pac4j.saml[0].metadata.service-provider.jdbc.driver-classorg.postgresql.Driver cas.authn.pac4j.saml[0].metadata.service-provider.jdbc.dialectorg.hibernate.dialect.PostgreSQLDialect第四步提前创建数据库表结构该表必须由你预先创建且在 CAS 启动之前就已存在CAS 不会自动建表不会用ddl-auto为这张元数据表生成 DDL。文档给出的建表语句如下其中table-name需替换为配置中指定的表名CREATE TABLE table-name (entityId VARCHAR(512), metadata TEXT)集成测试中的实际建表语句为见 DelegatedSaml2ClientMetadataJdbcTests.javaentityId列宽按数据库类型略有差异DROP TABLE IF EXISTS sp_metadata; CREATE TABLE sp_metadata (entityId VARCHAR(255), metadata TEXT);表结构约定entityIdCAS 作为 SP 的实体标识对应configuration.getServiceProviderEntityId()是元数据行的主键定位依据metadata完整 SP 元数据 XML 文本。底层实现原理元数据如何写入数据库当 JDBC 存储配置生效后DelegatedAuthenticationSaml2JdbcConfiguration.java 会向 CAS 注册一个DelegatedClientFactoryCustomizerBean其核心逻辑如下遍历配置中所有 SAML2 客户端casProperties.getAuthn().getPac4j().getSaml()仅处理同时配置了url与tableName的条目StringUtils.isNotBlank过滤通过JpaBeans.newDataSource(saml)依据 JDBC 属性创建数据源再包装为JdbcTemplate构造 pac4j 的SAML2JdbcMetadataGenerator并设置表名通过configuration.setMetadataGenerator(metadataGenerator)替换默认的元数据生成器调用configuration.setServiceProviderMetadataResource(ResourceUtils.NULL_RESOURCE)显式将文件系统元数据资源置空确保 CAS 不再读写文件一切 SP 元数据读写都走 JDBC。这一机制来自 pac4j 的org.pac4j.saml.metadata.jdbc.SAML2JdbcMetadataGeneratorSP 元数据首次生成时写入entityId/metadata两列后续节点启动时从同一行读取并复用从而保证所有 CAS 节点持有完全一致的 SP 元数据。验证效果通过 HTTP 端点读取落库元数据配置完成后可以借助 CAS 的元数据控制器验证 JDBC 存储是否生效。控制器 DelegatedSaml2ClientMetadataController.java 提供如下端点端点说明GET /sp/metadata返回第一个已注册 SAML2 客户端委托 IdP对应的 SP 元数据GET /sp/{client}/metadata按客户端名称返回对应 SP 元数据GET /sp/idp/metadata返回第一个客户端的 IdP 元数据GET /sp/{client}/idp/metadata按名称返回 IdP 元数据响应以application/xml返回。集成测试 DelegatedSaml2ClientMetadataJdbcTests.java 正是通过GET /sp/metadata与GET /sp/SAML2Client/metadata断言响应为 200 且包含非空 XML 内容从而验证 JDBC 元数据生成链路完整可用。验证时可直接查询数据库确认元数据行已写入SELECT entityId, metadata FROM sp_metadata;完整配置样例将以上步骤汇总一份可用的最小配置如下以 PostgreSQL 为例其他数据库替换driver-class、dialect与建表 SQL 即可# 1. 特性开关 CasFeatureModule.DelegatedAuthentication.saml-jdbc.enabledtrue # 2. SAML2 委托客户端与 JDBC 元数据存储 cas.authn.pac4j.saml[0].client-nameSAML2Client cas.authn.pac4j.saml[0].metadata.service-provider.jdbc.urljdbc:postgresql://localhost:5432/saml cas.authn.pac4j.saml[0].metadata.service-provider.jdbc.userpostgres cas.authn.pac4j.saml[0].metadata.service-provider.jdbc.passwordpassword cas.authn.pac4j.saml[0].metadata.service-provider.jdbc.driver-classorg.postgresql.Driver cas.authn.pac4j.saml[0].metadata.service-provider.jdbc.dialectorg.hibernate.dialect.PostgreSQLDialect cas.authn.pac4j.saml[0].metadata.service-provider.jdbc.table-namesp_metadata-- 建表必须在 CAS 启动前完成 CREATE TABLE sp_metadata (entityId VARCHAR(512), metadata TEXT);小结依赖模块cas-server-support-jpa-util功能开关CasFeatureModule.DelegatedAuthentication.saml-jdbc.enabledtrue默认关闭必须显式开启核心属性cas.authn.pac4j.saml[].metadata.service-provider.jdbc.*其中table-name为必填表结构CREATE TABLE table-name (entityId VARCHAR(512), metadata TEXT)需预先创建验证端点GET /sp/metadata、GET /sp/{client}/metadata可结合数据库查询确认元数据落库。如需进一步了解其他 SP 元数据存储后端文件系统、MongoDB、Amazon S3以及 SAML2 委托认证的完整配置可继续阅读仓库内 集成文档目录 下的相关章节并对照 cas-server-support-pac4j-saml 模块源码与测试深入实践。赞分享后端认证鉴权单点登录【免费下载链接】casApereo CAS - Identity Single Sign On for all earthlings and beyond.项目地址https://gitcode.com/gh_mirrors/ca/cas点击查看免费下载相关推荐Apereo CAS SAML2 委托认证实战将服务提供商元数据托管到 Amazon S3Apereo CAS SAML2 委托认证实战将服务提供商元数据托管到 Amazon S3 本文将介绍 Apereo CAS 在配置 SAML2 委托认证D后端认证鉴权单点登录ai-memory 规则晋升设计如何把长期记忆安全地提升为受治理的 AGENTS.md 规则2.1 特性前瞻ai memory 规则晋升设计如何把长期记忆安全地提升为受治理的 AGENTS.md 规则2.1 特性前瞻 本设计文档面向 ai memory 的 re后端认证鉴权单点登录Apereo CAS SAML2 委托认证之文件系统 SP 元数据管理指南Apereo CAS SAML2 委托认证之文件系统 SP 元数据管理指南 CAS 作为 SAML2 服务提供方SP参与委托认证时需要一份描述自身实体 I后端认证鉴权单点登录上一篇周末三小时我把QQ音乐歌单搬回了本地MCQTSS_QQMusic解析工具亲测笔记下一篇免费、快速、完整QQ截图独立版让截图、OCR识别与录屏一肩挑创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考