
后端认证鉴权单点登录【免费下载链接】casApereo CAS - Identity Single Sign On for all earthlings and beyond.项目地址https://gitcode.com/gh_mirrors/ca/cas点击查看免费下载CAS 作为 SAML2 身份提供者IdP时需要向各服务提供者SP暴露一份自描述的 IdP 元数据。本文围绕 CAS 官方的 SAML2 Metadata Management 文档讲清/idp/metadata三个端点的行为语义、service参数如何按服务注册表解析 IdP 元数据覆盖项以及基于文件系统的元数据生成、存储与按服务per-service覆盖目录的完整规则并结合cas-server-support-saml-idp/cas-server-support-saml-idp-web模块的源码给出端点背后的调用链、产物文件命名与签名生成逻辑帮助你在部署和密钥轮换场景下正确配置 CAS IdP 元数据。一、CAS 提供的 SAML2 元数据端点CAS 通过以下三个端点处理 SAML2 元数据的生成与分发/idp/metadata/idp/metadata/signingCertificate/idp/metadata/encryptionCertificate收到 GET 请求时端点会展示 CAS IdP 的 SAML2 元数据如果元数据已经存在且已生成则直接展示如果元数据缺失则会自动生成一份。CAS 配置决定了元数据文件和密钥生成、存储在哪里。需要特别注意端点可以接受一个service参数其取值可以是服务的实体标识entity id或服务的数字标识id。该参数会与 CAS 服务注册表service registry进行匹配使端点能够计算并合并针对该服务定义的任何 IdP 元数据覆盖项。源码印证端点由哪个组件提供这三个端点在 SamlIdPMetadataController 中实现。其核心方法generateMetadataForIdp的处理流程见 SamlIdPMetadataController.java#L57-L78为先通过getRegisteredServiceIfAny(service)解析出service参数对应的SamlRegisteredService可空调用metadataAndCertificatesGenerationService.generate(registeredService)确保元数据存在不存在则生成再通过samlIdPMetadataLocator.resolveMetadata(registeredService)定位元数据资源将内容以text/xml;charsetUTF-8写出到响应。其中getRegisteredServiceIfAnySamlIdPMetadataController.java#L116-L124正是“service参数按实体 id 或数字 id 匹配服务注册表”这一文档描述的源码实现若参数是纯数字则按数字 id 查找否则将其构造为WebApplicationService再按服务定义查找最终只接受SamlRegisteredService类型的注册服务。两个证书端点/signingCertificate、/encryptionCertificate则以text/plain分别返回签名证书和加密证书的原文。端点路径本身由常量 SamlIdPConstants.java#L28 中的ENDPOINT_IDP_METADATA BASE_ENDPOINT_IDP /metadata定义。单元测试 SamlIdPMetadataControllerTests 覆盖了对这三个端点的 GET 访问断言可作为端点行为的验证依据。文档中还提到可以使用 samltool 之类的第三方工具试验元数据生成流程、产出示例元数据供审阅学习该工具为外部在线服务此处仅作流程说明。二、文件系统策略默认生成位置与产物命名身份提供者元数据还可以通过若干策略来管理文件系统是默认策略SAML2 IdP 元数据默认在磁盘上生成。生成的或找到的签名/加密密钥等产物的内容可以通过 CAS 配置安全机制进行加密具体方式参见 CAS 配置安全 文档。核心配置项官方文档通过cas.authn.saml-idp.metadata.core与cas.authn.saml-idp.metadata.file-system两组前缀暴露核心配置。结合源码中的配置模型 SamlIdPMetadataProperties.javaRequiresModule(name cas-server-support-saml-idp)即需要引入cas-server-support-saml-idp模块可以确认file-system组只有两个关键项见 FileSystemSamlMetadataProperties.java配置项默认值说明cas.authn.saml-idp.metadata.file-system.locationfile:/etc/cas/samlSAML 元数据与签名/加密密钥所在的目录位置该目录用于存放配置文件cas.authn.saml-idp.metadata.file-system.sign-metadatafalse是否对生成在磁盘上的元数据做数字签名签名使用 SAML2 IdP 的签名证书与签名密钥core组的关键项定义在 CoreSamlMetadataProperties.java配置项默认值说明cas.authn.saml-idp.metadata.core.cache-expirationPT24H元数据的缓存时长Duration 格式cas.authn.saml-idp.metadata.core.key-size4096生成初始密钥对承载 SAML2 元数据的私钥/公钥时的密钥长度仅在需要生成密钥时相关cas.authn.saml-idp.metadata.core.certificate-algorithmSHA512withRSA生成 SAML2 身份提供者证书时使用的算法类型/名称仅在需要生成证书时相关此外core组还有元数据缓存大小、是否要求有效元数据、SSO/SLO 各绑定POST、SimpleSign、REDIRECT、SOAP开关等生成流程控制项完整清单可通过cas.authn.saml-idp.metadata.core前缀在 CAS 文档属性表中查询。产物文件命名从源码看默认约定默认的磁盘产物并非一个笼统的“目录”——从 FileSystemSamlIdPMetadataLocator 的实现看CAS 在元数据目录中管理 5 个具名产物产物文件名IdP 元数据idp-metadata.xml签名证书idp-signing.crt签名密钥idp-signing.key加密证书idp-encryption.crt加密密钥idp-encryption.key该类还持有CipherExecutor参数用于支持上述配置安全加密机制若磁盘文件内容是加密的读取时会经由resolveContentToResource解密后再使用同时它会维护一份元数据缓存Caffeine对应core.cache-expiration/core.cache-maximum-size配置。生成时机与签名逻辑从 FileSystemSamlIdPMetadataGenerator 的源码结构看afterPropertiesSet()会在 Spring 容器初始化阶段调用generate(Optional.empty())即启动时若元数据缺失会自动生成这与端点“元数据缺失则自动生成”的行为一致生成证书/密钥时若idp-signing.crt/idp-signing.key或加密一对已存在会先删除旧文件再重写writeCertificateAndKey中的处理意味着重新生成会替换既有密钥对当sign-metadata为true时writeMetadata会用签名证书 签名密钥对生成的元数据做数字签名后再写入idp-metadata.xml签名参数为 RSA-SHA256 签名算法、SHA-256 摘要、C14N 排除规范化见 FileSystemSamlIdPMetadataGenerator.java#L54-L103。相关行为在测试用例 FileSystemSamlIdPMetadataGeneratorTests 与 FileSystemSamlIdPMetadataLocatorTests 中有对应验证。三、Per Service按服务覆盖 IdP 元数据IdP 元数据、证书和密钥还可以在按服务per-service的粒度上定义用以覆盖全局默认值。覆盖目录的命名规则对于需要通过文件系统管理的、仅适用于某个服务定义的元数据产物必须存放在以服务定义名称和数字标识命名的目录中且该目录位于全局元数据目录之内。例如如果全局元数据产物在磁盘/etc/cas/config/saml/metadata下管理那么对于名称配置为SampleService、id 为1000的服务定义其专属元数据应当位于/etc/cas/config/saml/metadata/SampleService-1000从源码印证FileSystemSamlIdPMetadataLocator#getMetadataArtifact 的解析顺序是——当请求携带registeredService时先尝试元数据目录/按服务目录名/产物文件名只有当该服务目录或对应产物不存在时才回退到全局的元数据目录/产物文件名。因此service参数的实际效果是切换产物查找位置实现“同一端点、不同服务、不同元数据/证书”的覆盖。通过 idpMetadataLocation 直接指定 SP 侧的 IdP 元数据位置另一种方式是直接让 SAML2 服务提供者SP从磁盘指定位置定位 IdP 元数据。这在需要轮换 SAML2 IdP 元数据的签名/加密密钥、并希望让 SP 逐步gradually获取到新元数据的场景中非常有用{ class : org.apereo.cas.services.SamlRegisteredService, serviceId : the-entity-id-of-the-sp, name : SAMLService, id : 1, metadataLocation : https://url/to/metadata.xml, idpMetadataLocation : file:/path/to/idp/metadata/directory }metadataLocationSP 自身元数据的 URLSP 元数据地址idpMetadataLocation指示该 SP 从磁盘目录读取IdP元数据的开关/定位字段。源码中同样可以印证这一字段的作用在 FileSystemSamlIdPMetadataLocator 的getMetadataArtifact中若注册服务的getIdpMetadataLocation()非空会优先以该属性解析出的目录作为服务专属产物目录支持 SpEL 表达式解析而不再使用默认目录下的服务名-id子目录。测试 SamlIdPMetadataResolverTests 验证了带/不带服务上下文时元数据解析器的解析行为。典型的密钥轮换工作流即把新的idp-signing.crt/idp-signing.key、idp-encryption.crt/idp-encryption.key与更新后的idp-metadata.xml写入idpMetadataLocation指向的独立目录让个别 SP 先行切换到新元数据再逐步推广。四、高级策略其他元数据管理后端一览除了文件系统SP 或 IdP 元数据还可以使用以下任意一种策略来管理每种策略有独立的配置前缀与专属文档均以cas.authn.saml-idp.metadata.*为根前缀对应的配置模型字段在 SamlIdPMetadataProperties.java 中声明存储后端说明文档仓库相对路径Metadata Query ProtocolMDQ 指南HTTP/HTTPSHTTP 指南RESTREST 指南GitGit 指南MongoDbMongoDb 指南RedisRedis 指南JPAJPA 指南GroovyGroovy 指南Amazon S3Amazon S3 指南DynamoDbDynamoDb 指南Google Cloud StorageGCP Storage 指南这些后端对应的实现分别位于cas-server-support-saml-idp-metadata-*、cas-server-support-saml-idp等模块中选型时可根据部署环境本地文件系统、数据库、对象存储、协议级 MDQ决定。五、与 SAML 服务管理的关系配置元数据端点只是 IdP 侧工作的一半另一半是正确注册和管理 SAML2 服务提供者。SP 的注册、属性释放策略等配置请参阅 SAML2 服务管理指南。六、小结与可验证要点三个端点/idp/metadata、/idp/metadata/signingCertificate、/idp/metadata/encryptionCertificate均为 GET 访问元数据缺失时自动触发生成SamlIdPMetadataController.java。service参数支持实体 id 与数字 id 两种形式用于按服务注册表匹配并合并 IdP 元数据覆盖项。文件系统默认产物为 5 个具名文件idp-metadata.xml、idp-signing.crt/key、idp-encryption.crt/key目录由cas.authn.saml-idp.metadata.file-system.location控制默认file:/etc/cas/saml。按服务覆盖的两种途径元数据目录/服务名-服务id子目录或在服务定义中设置idpMetadataLocation指向独立磁盘目录适用于密钥轮换的灰度切换。sign-metadata控制是否用 IdP 签名证书对落盘元数据做数字签名密钥长度与证书算法由core.key-size默认 4096与core.certificate-algorithm默认SHA512withRSA决定。磁盘产物可用 CAS 配置安全机制加密参见 CAS 配置安全。赞分享后端认证鉴权单点登录【免费下载链接】casApereo CAS - Identity Single Sign On for all earthlings and beyond.项目地址https://gitcode.com/gh_mirrors/ca/cas点击查看免费下载相关推荐Apereo CAS SAML2 元数据的 Redis 管理动态元数据存储、按服务覆盖与实现解析Apereo CAS SAML2 元数据的 Redis 管理动态元数据存储、按服务覆盖与实现解析 在 Apereo CAS 中充当 SAML2 身份提供者I后端认证鉴权单点登录Apereo CAS 中使用 Google Cloud Storage 托管 SAML2 IdP 元数据JSON 文档结构、GCS 对象布局与每服务覆盖机制Apereo CAS 中使用 Google Cloud Storage 托管 SAML2 IdP 元数据JSON 文档结构、GCS 对象布局与每服务覆盖机制后端认证鉴权单点登录Apereo CAS使用 MongoDb 实现 SAML2 元数据的集中式管理与 IdP 元数据动态存储Apereo CAS使用 MongoDb 实现 SAML2 元数据的集中式管理与 IdP 元数据动态存储 本篇技术指南基于 Apereo CAS 官方文档 C后端认证鉴权单点登录上一篇节点错误恢复自动降级与备用流程设计下一篇Laf 开发环境一键部署指南基于 Sealos 与 Multipass 搭建 v1.0 本地集群创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考