如有疑问,请看视频:CAS单点登录(第7版)_在线视频教程-CSDN程序员研修院
1. 属性
1.1. 属性定义
1.1.1. 概述
1.1.1.1. 属性定义
从身份验证或属性存储库源获取和解析 CAS 中属性的定义时,往往使用其名称进行定义和引用,而无需任何其他元数据或修饰。例如,您可能希望检索 uid 属性和 virtuallyrename 并将其全局映射到 userIdentifier 属性或特定应用程序集成。对于大多数用例,此配置工作得相当轻松,但是,根据目标应用程序的性质和用于完成集成的身份验证协议,在与依赖方共享和发布时,可能会施加额外的要求,并且可能必须指定以定义具有附加指针的属性。例如,SAML2 服务提供商可能需要 eduPersonPrincipalName 的 scoped 属性,该属性的值始终由 uid 属性确定,并且始终提供特殊的友好名称,而不管目标应用程序如何。
虽然有关给定属性的元数据片段可以在 CAS 配置设置中全局定义,也可以在服务定义中定义,但属性定义存储允许描述有关必要属性的元数据,并在属性解析和发布期间考虑特殊修饰。属性定义存储的规范是完全可选的,存储可以不包含任何属性定义。
CAS 配置目录中提供了以下设置和属性:
l 必填
下面列出的配置设置在 CAS 配置元数据中标记为 Required。此标志表示可能需要该设置的存在才能激活或影响 CAS 功能的行为,并且通常应进行审查、可能拥有和调整。如果为该设置分配了默认值,则无需严格将该设置放在配置副本中,但仍应对其进行检查以确保它符合您的部署预期。
Show entries
搜索:
· cas.authn.attribute-repository.attribute-definition-store.json.location= 在 CAS 能够自动监视底层资源的更改并动态检测更新和修改的情况和场景中,您可以将以下设置指定为环境变量或系统属性,其值为 false,以禁用资源观察程序: org.apereo.cas.configuration.model.SpringResourceProperties. 如何配置此属性? |
显示 1 到 1 的 1 个条目
上一页1下一页
l 笔记
配置元数据
本节中列出的配置属性集合是从CAS源代码和包含实际字段定义、类型、描述、模块等的组件自动生成的。此元数据可能并不总是100%准确,或者可能缺乏细节和充分的解释。
有选择性
本节仅作为指南。不要将整个设置集合复制/粘贴到您的CAS配置中;而是只选择您需要的属性。除非您确定设置的用途,否则不要启用设置,也不要将设置复制到您的配置中只是为了保留它们作为参考。所有这些都会导致升级难题、维护噩梦和过早老化。
YAGNI
请注意,对于几乎所有的用例,声明和配置这里列出的属性就足够了。您不应该显式地修改CAS XML/Java/etc配置文件来设计身份验证处理程序、创建属性释放策略等。运行时的CAS将自动为您配置所有必需的更改。如果您不确定给定CAS设置的含义,不要毫不犹豫地打开它。查看代码库或者更好的是,提出问题来澄清预期的行为。
命名约定
属性名称可以用非常宽松的术语来指定。例如cas.someProperty、cas.some-property、cas.some_property都是有效的名称。虽然CAS接受所有形式,但某些组件(在CAS和其他使用的框架中)在运行时的激活取决于属性值,因此需要在CAS配置中使用kebab case指定此属性。这对于CAS拥有的属性以及可能通过外部库或框架(如Spring Boot等)呈现给系统的属性都是如此。
注
如果可能,属性应以小写kebab格式存储,例如cas.property-name=value。此规则唯一可能的例外是命名执行器端点时;执行器端点的名称(即ssoSessions)必须保持在camelCase模式。
由CAS平台直接控制的设置和属性总是以前缀cas开头。所有其他设置都是通过其他底层框架控制和提供给CAS的,并且可能有自己的模式和语法。注意区别。无法识别的属性会被CAS和/或CAS所依赖的框架拒绝。这意味着如果您拼错了属性定义或未能遵守点符号语法,您的设置将完全被CAS拒绝,并且它控制的功能可能永远不会以您打算的方式激活。
验证
配置属性在CAS启动时自动验证,以报告配置绑定问题,特别是如果配置模式无法识别或验证定义的CAS设置。其他验证过程也通过配置元数据处理,属性迁移在启动时由Spring Boot和系列自动应用。
索引设置
能够接受多个值的CAS设置通常与索引一起记录,例如cas.some.setting[0]=value。索引[0]旨在由采用者递增,以允许不同的多个配置块。
1.1.1.1.1. JSON 属性定义
属性定义可以在 JSON 文件中定义,其位置通过 CAS 设置提供。JSON 文件的结构可能与以下内容匹配:
1 2 3 4 5 6 7 8 9 | { "@class" : "java.util.TreeMap", "employeeId" : { "@class" : "org.apereo.cas.authentication.attribute.DefaultAttributeDefinition", "key" : "employeeId", "scoped" : true, "attribute" : "empl_identifier" } } |
一般来说,属性定义是使用 Map 指定的,该 Map 的键是属性名称,由 CAS 属性解析引擎解析。作为 Map 键的属性名称必须与属性定义本身的 key 属性匹配。如果相关属性尚未解析为具有一组有效值的主体属性,则根据属性发布策略,可以动态解析并创建该属性作为可生成值的属性定义。
授权
请注意,在撰写本文时,属性定义不能用于通过 RBAC 之类的工具驱动授权决策。此类定义通常在属性发布阶段进行评估,这对于授权决策来说为时已晚。如果您需要专门为授权决策生成属性,请考虑定义一个特定的属性存储库,该存储库将在属性解析阶段进行评估。
以下设置可由属性定义指定:
名字 | 描述 |
key | 属性名称,由 CAS 属性解析引擎解析。 |
name | 以逗号分隔的属性名称列表,用于在属性发布期间虚拟重命名/重新映射并与目标应用程序共享。 |
scoped | (可选)如果true,则属性值的范围将限定为 settings 中定义的 CAS 服务器部署的范围。 |
encrypted | (可选)如果true,则将使用服务定义的公有密钥以 base-64 对属性值进行加密和编码。 |
attribute | (可选)source 属性,用于为属性定义本身提供值,替换原始 source 的值。 |
patternFormat | (可选)java.text.MessageFormat 中用于装饰属性值的模板。 |
script | (可选)外部或嵌入式 Groovy 脚本,用于处理和生成属性值。此字段支持 Spring 表达式语言语法。 |
canonicalizationMode | (可选)控制属性值的转换;允许的值为 UPPERLOWER 或 NONE。 |
patterns | (可选)正则表达式模式到静态/动态构造的映射,以构建值,在属性定义基于现有属性构建的情况下。 |
flattened | (可选)指示是否应将具有多个值的属性定义展平为单个值,并由分配的分隔符分隔。 |
singleValue | (可选)默认值为 false。确定如果属性只有一个值,则是否应将该属性生成为单值声明。 |
如果属性定义要生成值,则应按给定的顺序进行以下操作:
l 根据属性定义中指定的attribute设置(如果有)生成属性值。
l 根据属性定义中指定的script设置(如果有)生成属性值。
l 根据属性定义中指定的patterns设置(如果有)生成属性值。
l 根据属性定义中指定的scoped设置(如果有)生成属性值。
l 根据属性定义中指定的 patternFormat 设置(如果有)生成属性值。
l 根据属性定义中指定的encrypted设置(如果有)生成属性值。
l 根据属性定义中指定的 canonicalizationMode 设置(如果有)生成属性值。
l 根据属性定义中指定的flattened设置(如果有)生成属性值。
l 基本
为 employeeId 定义一个属性定义,以根据另一个empl_identifier作为源的属性生成范围属性:
1 2 3 4 5 6 7 8 9 | { "@class" : "java.util.TreeMap", "employeeId" : { "@class" : "org.apereo.cas.authentication.attribute.DefaultAttributeDefinition", "key" : "employeeId", "scoped" : true, "attribute" : "empl_identifier" }} |
现在,定义已全局可用,然后可以像往常一样使用以下定义发布该属性:
1 2 3 4 5 6 | ... "attributeReleasePolicy" : { "@class" : "org.apereo.cas.services.ReturnAllowedAttributeReleasePolicy", "allowedAttributes" : [ "java.util.ArrayList", [ "employeeId" ] ] }... |
l 加密
与上述相同的用例,除了属性值将使用服务定义的公钥进行加密和编码:
1 2 3 4 5 6 7 8 9 | { "@class" : "java.util.TreeMap", "employeeId" : { "@class" : "org.apereo.cas.authentication.attribute.DefaultAttributeDefinition", "key" : "employeeId", "encrypted" : true, "attribute" : "empl_identifier" } } |
服务定义应该指定一个公钥定义:
1 2 3 4 5 6 7 | ... "publicKey" : { "@class" : "org.apereo.cas.services.RegisteredServicePublicKeyImpl", "location" : "classpath:public.key", "algorithm" : "RSA" }... |
可以通过以下命令生成密钥:
1 2 3 | openssl genrsa -out private.key 1024 openssl rsa -pubout -in private.key -out public.key -inform PEM -outform DER openssl pkcs8 -topk8 -inform PEM -outform DER -nocrypt -in private.key -out private.p8 |
l 模式格式
定义属性定义以根据模式格式生成值:
1 2 3 4 5 6 7 8 9 10 11 12 | { "@class" : "java.util.TreeMap", "eduPersonPrincipalName" : { "@class" : "org.apereo.cas.authentication.attribute.DefaultAttributeDefinition", "key" : "eduPersonPrincipalName", "name" : "urn:oid:1.3.6.1.4.1.5923.1.1.1.6", "friendlyName" : "eduPersonPrincipalName", "scoped" : true, "patternFormat": "hello,{0}", "attribute" : "uid" } } |
如果解析的属性集是uid=[test1, test2]并且CAS服务器的范围是example.org,则eduPersonPrincipalName的最终值将是[hello,test1@example.org,hello,test2@example.org]发布为
urn:oid:1.3.6.1.4.1.5923.1.1.1.6,友好名称为eduPersonPrincipalName。
l 嵌入式脚本
与上述相同的用例,除了属性值由嵌入式Groovy脚本额外处理
1 2 3 4 5 6 7 8 9 10 11 | { "@class" : "java.util.TreeMap", "eduPersonPrincipalName" : { "@class" : "org.apereo.cas.authentication.attribute.DefaultAttributeDefinition", "key" : "eduPersonPrincipalName", "name" : "urn:oid:1.3.6.1.4.1.5923.1.1.1.6", "friendlyName" : "eduPersonPrincipalName", "scoped" : true, "script": "groovy { logger.info(\" name: ${attributeName}, values: ${attributeValues} \"); return ['Hi', attributes['firstname']] }" } } |
如果CAS服务器的作用域为example.org,则eduPersonPrincipalName的最终值将是[Hi, casuser],发布为
urn:oid:1.3.6.1.4.1.5923.1.1.1.6,友好名称为eduPersonPrincipalName。
l 外部脚本
与上述相同的用例,除了属性值由外部Groovy脚本额外处理:
1 2 3 4 5 6 7 8 9 10 11 | { "@class" : "java.util.TreeMap", "eduPersonPrincipalName" : { "@class" : "org.apereo.cas.authentication.attribute.DefaultAttributeDefinition", "key" : "eduPersonPrincipalName", "name" : "urn:oid:1.3.6.1.4.1.5923.1.1.1.6", "friendlyName" : "eduPersonPrincipalName", "scoped" : true, "script": "file:/attribute-definitions.groovy" } } |
Groovy脚本的大纲应定义为:
1 2 3 4 5 | def run(Object[] args) { def (attributeName,attributeValues,logger,registeredService,attributes) = args logger.info("name: ${attributeName}, values: ${attributeValues}, attributes: ${attributes}") return ["Hello " + attributes['givenName']]} |
如果CAS服务器的作用域为example.org,则eduPersonPrincipalName的最终值将是[Hello casuser],发布为
urn:oid:1.3.6.1.4.1.5923.1.1.1.6,友好名称为eduPersonPrincipalName。
l 正则表达式模式
定义属性定义以根据模式匹配规则有条件地生成值。如果属性定义要从现有的已解析属性构建其值,则根据patterns映射中定义的模式检查每个可用值。对于每个匹配,链接条目用于确定属性定义值,静态或动态,这通常是内联的Groovy脚本。如果未找到模式匹配,则跳过该值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | { "@class" : "java.util.TreeMap", "memberships" : { "@class" : "org.apereo.cas.authentication.attribute.DefaultAttributeDefinition", "key": "memberships", "attribute" : "memberships", "name": "affiliations", "patterns" : { "@class" : "java.util.TreeMap", "m[0-2].*" : "admins", "m[3-6].*" : "groovy { return 'users' }" } } } |
上面的代码片段构建了一个属性定义,memberships,它最终被编码并发布到名称为affiliations的应用程序中。此定义的属性值来自必须提供给CAS的memberships属性。根据定义的模式检查每个值,成功匹配后,将评估链接构造以确定最终值。
例如,如果解析的属性集是memberships=[m1, m2, m3, m4, m9],则memberships的最终值将是[admins,users],然后将以affiliations的名称发布。
要准备CAS以支持和与Apache Groovy集成,请查看本指南。
l 扁平
如果为属性定义组装的属性值集合最终包含多个值,则可以指示属性定义使用给定的分隔符将所有值展平为单个值。
1 2 3 4 5 6 7 8 9 | { "@class" : "java.util.TreeMap", "allgroups" : { "@class" : "org.apereo.cas.authentication.attribute.DefaultAttributeDefinition", "key": "allgroups", "attribute" : "memberships", "flattened": "/" } } |
例如,如果解析的属性集是memberships=[m1, m2, m3, m4, m9],则memberships的最终值将是m1/m2/m3/m4/m9。
1.1.1.1.2. 自定义属性定义
您可以使用 CAS 动态设计和注入自己的属性定义。首先,您需要设计一个 @AutoConfiguration 类来包含您自己的
AttributeDefinitionStoreConfigurer 实现:
1 2 3 4 5 6 7 8 | @AutoConfiguration public class MyConfiguration { @Bean public AttributeDefinitionStoreConfigurer myAttributeDefinitionStore() { ... } } |
您的配置类需要向 CAS 注册。有关更多详细信息,请参阅本指南。
1.2. 属性解析
1.2.1. 概述
1.2.1.1. 属性解析
属性解析策略由 Person Directory 系列组件控制。该框架支持 LDAP 和 JDBC 属性解析、缓存、来自多个属性源的属性聚合等。
默认缓存策略
默认情况下,属性缓存到 SSO Session的长度。这意味着,虽然 Person Directory 提供的基础组件可能具有不同的缓存模型,但默认情况下,从 CAS 的角度来看,只要 SSO Session存在,就不会在后续请求中刷新和检索属性。
1.2.1.1.1. 执行器端点
CAS 提供以下端点:
GET | /cas/actuator/resolveAttributes/{username} |
解析 user 的主体属性。
DELETE | /cas/actuator/personDirectory/{username} |
GET | /cas/actuator/personDirectory/{username} |
1.2.1.1.2. Person Directory人员目录
用于从各种基础来源解析人员和属性的框架。它由一组组件组成,这些组件从 JDBC、LDAP 等中检索、缓存、解析、聚合、合并人员属性。
CAS 配置目录中提供了以下设置和属性:
必填
自选
Groovy 脚本
主体转换
笔记
下面列出的配置设置在 CAS 配置元数据中标记为 Required。此标志表示可能需要该设置的存在才能激活或影响 CAS 功能的行为,并且通常应进行审查、可能拥有和调整。如果为该设置分配了默认值,则无需严格将该设置放在配置副本中,但仍应对其进行检查以确保它符合您的部署预期。
Show entries
搜索:
· cas.person-directory.principal-transformation.groovy.location= 在 CAS 能够自动监视底层资源的更改并动态检测更新和修改的情况和场景中,您可以将以下设置指定为环境变量或系统属性,其值为 false,以禁用资源观察程序: org.apereo.cas.configuration.model.core.authentication.GroovyPrincipalTransformationProperties. 如何配置此属性? |
显示 1 到 1 的 1 个条目
上一页1下一页
定义和配置属性源以描述要为每个经过身份验证的主体获取的全局属性集。然后,服务管理器根据特定于服务的属性发布规则筛选该全局属性集。
请注意,可以为每个属性存储库源分配一个唯一标识符,以用于其他筛选。Person Directory 提供的属性解析引擎也可以配置为仅查阅所有属性存储库源,而是查询选定的属性存储库源,从而将属性检索任务推迟到身份验证过程的后续阶段,例如释放属性。
主要决议
请注意,在大多数情况下(如果不是全部),CAS 身份验证能够从身份验证源检索和解析属性,这将消除在身份验证和属性源相同时专门配置单独解析程序的需要。仅当源不同或需要处理更高级的属性解析用例(如级联、合并等)时,才需要使用单独的解析器。有关更多信息,请参阅本指南。
解析程序的目标是为 CAS 构建一个最终可识别的经过身份验证的主体,该主体内部包含许多属性。person-directory 解析程序的行为是这样的,它会尝试查找主体 ID,在大多数情况下,该 ID 与身份验证期间提供的 credential id 相同,或者可以通过自定义属性来记录。然后,解析程序开始从定义的属性存储库中构造属性。如果它意识到自定义属性用于确定主体 ID 并且同一属性也被设置为收集到最终的属性集中,则它将从最终集合中删除该属性。
请注意,默认情况下,CAS 会自动创建适用于 LDAP、JDBC 等的属性存储库源。如果您需要更多内容,则需要采用更详细的方法来定义 bean 配置。
1.2.1.1.2.1. 属性存储库
控制主体解析进程从属性源检索的身份验证属性集,除非特定身份验证方案另有说明。
如果定义了多个属性存储库源,则会将它们添加到列表中,并缓存和合并其结果。
以下选项可用于获取 CAS 中的属性。
源 | 参考 |
存根 | 请参阅本指南。 |
LDAP 协议 | 请参阅本指南。 |
Groovy | 请参阅本指南。 |
REST | 请参阅本指南。 |
Grouper | 请参阅本指南。 |
Redis | 请参阅本指南。 |
JDBC | 请参阅本指南。 |
OKTA公司 | 请参阅本指南。 |
自定义 | 请参阅本指南。 |
Microsoft Azure 活动目录 | 请参阅本指南。 |
CAS 配置目录中提供了以下设置和属性:
自选
笔记
下面列出的配置设置在 CAS 配置元数据中标记为 Optional(可选)。This标志表示在最终用户 CAS 配置中不需要立即存在该设置,因为分配了默认值,或者该功能的激活不受设置值有条件地控制。换句话说,仅当需要修改默认值或需要打开由设置控制的功能时,才应在配置中包含此字段。
Show entries
搜索:
· cas.authn.attribute-repository.core.aggregation=MERGE 指示应如何将多个属性存储库的结果聚合在一起。可用值如下: MERGE默认值。旨在按顺序查询多个存储库,并将结果合并到单个结果集中。 CASCADE按顺序查询多个存储库,并将结果合并到单个结果集中。查询每个存储库时,结果集中第一个查询的属性将用作下一个存储库的查询。 org.apereo.cas.configuration.model.core.authentication.PrincipalAttributesCoreProperties. 如何配置此属性? |
· cas.authn.attribute-repository.core.default-attributes-to-release= 默认情况下,CAS 提供了向所有服务释放一组主体属性的功能。此捆绑包不是基于每个服务定义的,而是始终与服务的特定发布策略生成的属性相结合,例如,您可以设计规则以始终将 givenName 和 cn 释放给每个应用程序,此外,根据其属性发布策略,仅允许某些应用程序的其他特定主体属性。 org.apereo.cas.configuration.model.core.authentication.PrincipalAttributesCoreProperties. 如何配置此属性? |
· cas.authn.attribute-repository.core.expiration-time-unit= 属性的过期缓存时间单位。 org.apereo.cas.configuration.model.core.authentication.PrincipalAttributesCoreProperties. 如何配置此属性? |
· cas.authn.attribute-repository.core.expiration-time=30 指示从底层属性存储库获取属性后的全局缓存过期期限。零或负值表示在必须始终从源获取属性的情况下,不应进行属性缓存。 org.apereo.cas.configuration.model.core.authentication.PrincipalAttributesCoreProperties. 如何配置此属性? |
· cas.authn.attribute-repository.core.maximum-cache-size=10000 指示用于存储从属性存储库检索到的属性的全局缓存大小。 org.apereo.cas.configuration.model.core.authentication.PrincipalAttributesCoreProperties. 如何配置此属性? |
显示 1 到 5 的 9 个条目
上一页12下一页
记住这个
请注意,在某些情况下,CAS 身份验证能够在同一身份验证请求中从身份验证源检索和解析属性,这将消除配置单独属性存储库的需要,特别是当身份验证和属性源相同时。当来源不同时,或者当需要处理更高级的属性解析用例(如级联、合并等)时,应要求使用单独的存储库。
所有源的属性都在它们自己的单个块中定义。CAS 不关心属性的源所有者。它会在可以找到它们的地方找到它们,否则,它会继续前进。这意味着可以通过一个源解析一定数量的属性,而其余属性可以通过另一个源解析。如果来源之间存在共性,则合并将决定最终结果和行为。
请注意,属性 repository sources(if/when defined)按特定顺序执行。在可能进行属性合并时,请务必考虑这一点。
请注意,如果未定义显式属性映射,则记录上所有允许的属性都可以由 CAS 从属性存储库源中检索,并提供给委托人。另一方面,如果定义了显式属性映射,则仅检索映射的属性。
当从多个源找到同一属性时,可以使用以下合并策略来解决冲突:
类型 | 描述 |
REPLACE | 覆盖现有属性值 (如果有)。 |
ADD | 保留现有属性值(如果有),并忽略解析链中后续源的值。 |
MULTIVALUED | 将所有值合并到单个属性中,实质上是创建多值属性。 |
NONE | 不合并属性,仅使用在身份验证期间检索到的属性。 |
当定义多个属性存储库源来获取数据时,可以使用以下聚合策略来解析和合并属性:
类型 | 描述 |
MERGE | Default。按顺序查询多个存储库,并将结果合并到单个结果集中。 |
CASCADE | 同上;每个查询的结果将向下传递到下一个属性存储库源。如果查询的第一个存储库没有结果,则不会再查询其他属性存储库。 |
1.2.2. 存储库
1.2.2.1. 静态的
1.2.2.1.1. 存根属性解析
以下配置描述了如何从 Stub 属性存储库中获取和检索属性。
CAS 配置目录中提供了以下设置和属性:
自选
笔记
下面列出的配置设置在 CAS 配置元数据中标记为 Optional(可选)。This标志表示在最终用户 CAS 配置中不需要立即存在该设置,因为分配了默认值,或者该功能的激活不受设置值有条件地控制。换句话说,仅当需要修改默认值或需要打开由设置控制的功能时,才应在配置中包含此字段。
Show entries
搜索:
· cas.authn.attribute-repository.stub.attributes= 可以允许对属性进行虚拟重命名和重新映射。属性映射中的键是原始属性,值应为虚拟重命名的属性。 org.apereo.cas.configuration.model.core.authentication.StubPrincipalAttributesProperties. 如何配置此属性? |
· cas.authn.attribute-repository.stub.id= 可以为此字段分配一个值,以唯一标识此解析程序。 org.apereo.cas.configuration.model.core.authentication.StubPrincipalAttributesProperties. 如何配置此属性? |
· cas.authn.attribute-repository.stub.order= 此属性存储库在存储库链中的顺序。可用于在 chain 中显式定位此源并影响合并策略。 org.apereo.cas.configuration.model.core.authentication.StubPrincipalAttributesProperties. 如何配置此属性? |
· cas.authn.attribute-repository.stub.state=active 是否启用基于此源的属性解析。可用值如下: ACTIVE活动且已启用的存储库,默认情况下会自动调用。 DISABLED属性存储库已禁用,不会用于解析人员和属性。 STANDBY存储库处于半启用状态,仅在明确请求时等待按需调用,并且不会注册到解决计划中。 org.apereo.cas.configuration.model.core.authentication.StubPrincipalAttributesProperties. 如何配置此属性? |
显示 1 到 4 的 4 个条目
上一页1下一页
1.2.2.2. LDAP 协议
1.2.2.2.1. LDAP 属性解析
CAS 允许从 LDAP 或 Active Directory 检索属性。
通过在 WAR 覆盖中包含以下依赖项来启用支持:
Apache Maven
Gradle
BOM - Spring
BOM - Gradle
资源
1 2 3 4 5 6 7 8 9 10 | dependencies { /* The following platform references should be included automatically and are listed here for reference only. implementation enforcedPlatform("org.apereo.cas:cas-server-support-bom:${project.'cas.version'}") implementation platform(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES) */ implementation "org.apereo.cas:cas-server-support-ldap"} |
用法
仅当您尚未使用 LDAP 身份验证时,才需要包含此模块。
以下配置介绍如何从 LDAP 属性存储库中获取和检索属性。
CAS 配置目录中提供了以下设置和属性:
必填
自选
LDAP & Active Directory
笔记
下面列出的配置设置在 CAS 配置元数据中标记为 Required。此标志表示可能需要该设置的存在才能激活或影响 CAS 功能的行为,并且通常应进行审查、可能拥有和调整。如果为该设置分配了默认值,则无需严格将该设置放在配置副本中,但仍应对其进行检查以确保它符合您的部署预期。
Show entries
搜索:
· cas.authn.attribute-repository.ldap[0].base-dn= 要使用的基本 DN。在某些情况下,单个 LDAP 树的不同部分可能被视为 base-dns。可以使用特殊的分隔符指定每个条目并将其连接在一起,而不是为每个单独的 base-dn 复制 LDAP 配置块。用户 DN 按定义的顺序使用所有 base-dn 和 DNresolver 的组合进行检索。如果找到多个 DN,则 DN 解析应失败。否则,将返回找到的第一个 DN。通常的语法是:subtreeA,dc=example,dc=net|subtreeC,dc=example,dc=net。 org.apereo.cas.configuration.model.support.ldap.LdapPrincipalAttributesProperties. 如何配置此属性? |
· cas.authn.attribute-repository.ldap[0].bind-credential= 连接到 LDAP 时要使用的绑定凭证。 org.apereo.cas.configuration.model.support.ldap.LdapPrincipalAttributesProperties. 如何配置此属性? |
· cas.authn.attribute-repository.ldap[0].bind-dn= 连接到 LDAP 时要使用的绑定 DN。注入 LDAP 连接池的 LDAP 连接配置可以使用以下参数进行初始化: bindDn/bindCredential provided - 在初始化连接时使用提供的凭证进行绑定。 bindDn/bindCredential 设置为 * - 使用快速绑定策略初始化池。 bindDn/bindCredential 设置为空白 - 跳过连接初始化;匿名执行操作。 提供的 SASL 机制 - 初始化连接时使用给定的 SASL 机制进行绑定。 org.apereo.cas.configuration.model.support.ldap.LdapPrincipalAttributesProperties. 如何配置此属性? |
· cas.authn.attribute-repository.ldap[0].ldap-url= 服务器的 LDAP URL。可以指定多个,用空格和/或逗号分隔。 org.apereo.cas.configuration.model.support.ldap.LdapPrincipalAttributesProperties. 如何配置此属性? |
· cas.authn.attribute-repository.ldap[0].search-filter= 您还可以在 org.apereo.cas.configuration.model.support.ldap.LdapPrincipalAttributesProperties. 如何配置此属性? |
显示 1 到 5 个条目中的 5 个
上一页1下一页
1.2.2.3. JDBC
1.2.2.3.1. JDBC 属性解析
CAS 确实允许从各种 SQL 数据库中检索属性。
通过在 WAR 覆盖中包含以下依赖项来启用支持:
Apache Maven
Gradle
BOM - Spring
BOM - Gradle
资源
1 2 3 4 5 6 7 8 9 10 | dependencies { /* The following platform references should be included automatically and are listed here for reference only. implementation enforcedPlatform("org.apereo.cas:cas-server-support-bom:${project.'cas.version'}") implementation platform(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES) */ implementation "org.apereo.cas:cas-server-support-jdbc" } |
要了解如何配置数据库驱动程序,请参阅本指南。
CAS 配置目录中提供了以下设置和属性:
必填
自选
Hibernate 和 JDBC
笔记
下面列出的配置设置在 CAS 配置元数据中标记为 Required。此标志表示可能需要该设置的存在才能激活或影响 CAS 功能的行为,并且通常应进行审查、可能拥有和调整。如果为该设置分配了默认值,则无需严格将该设置放在配置副本中,但仍应对其进行检查以确保它符合您的部署预期。
Show entries
搜索:
· cas.authn.attribute-repository.jdbc[0].driver-class= 用于连接到数据库的 JDBC 驱动程序。 org.apereo.cas.configuration.model.support.jdbc.JdbcPrincipalAttributesProperties. 如何配置此属性? |
· cas.authn.attribute-repository.jdbc[0].password= 数据库连接密码。 org.apereo.cas.configuration.model.support.jdbc.JdbcPrincipalAttributesProperties. 如何配置此属性? |
· cas.authn.attribute-repository.jdbc[0].url= 数据库连接 URL。 此设置支持 Spring 表达式语言。 org.apereo.cas.configuration.model.support.jdbc.JdbcPrincipalAttributesProperties. 如何配置此属性? |
· cas.authn.attribute-repository.jdbc[0].user= 数据库用户必须具有足够的权限,以便能够在需要时处理架构更改和更新。 org.apereo.cas.configuration.model.support.jdbc.JdbcPrincipalAttributesProperties. 如何配置此属性? |
显示 1 到 4 的 4 个条目
上一页1下一页
JDBC 属性源可以根据以下机制进行定义。
1.2.2.3.1.1. 单排
旨在处理存在一行到一个用户的映射的表。此表格格式的一个示例是:
uid | first_name | last_name | 电子邮件 |
jsmith | John | Smith | jsmith@example.org |
1.2.2.3.1.2. 多行
旨在处理存在一行到一个用户的映射的表。此表格格式的一个示例是:
uid | attr_name | attr_value |
jsmith | first_name | John |
jsmith | last_name | Smith |
jsmith | jsmith@example.org |
您需要在配置中定义列映射,以将 attr_name 列映射到 attr_value 列
1.2.2.3.1.3. 例子
假设 CAS 配置为对 Active Directory 进行身份验证。其详细信息在下面定义的帐户通过 sAMAccountName 进行身份验证。
属性 | 价值 |
sAMAccountName | johnsmith |
cn | John Smith |
1.2.2.3.1.4. 示例 #1
如果解析程序配置为使用 sAMAccoutName 作为主体 ID 的属性,则当身份验证完成时,解析程序会尝试从属性存储库源构造属性,它将 sAMAccoutName 视为属性,并看到主体 ID 将由 sAMAccoutName 创建。因此,它将从属性中删除 sAMAccoutName。最终结果是 id 为 johnsmith 的主体,其 cn 属性为 John Smith。
1.2.2.3.1.5. 示例 #2
如果解析程序配置为使用 cn 作为主体 ID 的属性,则在身份验证完成后,解析程序将尝试从属性存储库源构造属性。然后,它将 sAMAccoutName 视为属性,并看到主体 ID 将由 cn.因此,它将从属性中删除 cn。最终结果是 id 为 John Smith的主体,其 sAMAccountName 属性为 johnsmith。
1.2.2.4. Groovy
1.2.2.4.1. Groovy 属性解析
以下配置描述了如何从 Groovy 属性存储库中获取和检索属性。
CAS 配置目录中提供了以下设置和属性:
必填
自选
Groovy 脚本
笔记
下面列出的配置设置在 CAS 配置元数据中标记为 Required。此标志表示可能需要该设置的存在才能激活或影响 CAS 功能的行为,并且通常应进行审查、可能拥有和调整。如果为该设置分配了默认值,则无需严格将该设置放在配置副本中,但仍应对其进行检查以确保它符合您的部署预期。
Show entries
搜索:
· cas.authn.attribute-repository.groovy[0].location= 在 CAS 能够自动监视底层资源的更改并动态检测更新和修改的情况和场景中,您可以将以下设置指定为环境变量或系统属性,其值为 false,以禁用资源观察程序: org.apereo.cas.configuration.model.core.authentication.GroovyPrincipalAttributesProperties. 如何配置此属性? |
显示 1 到 1 的 1 个条目
上一页1下一页
Groovy 脚本可以设计为:
1 2 3 4 5 6 7 8 9 | import java.util.* def run(final Object... args) { def (username,attributes,logger,properties,appContext) = args logger.debug("[{}]: The received uid is [{}]", this.class.simpleName, username) // All attribute values must be defined as a collection wrapped in [] return [username:[username], likes:["cheese", "food"], id:[1234,2,3,4,5], another:["attribute"] ]} |
以下参数将传递给脚本:
参数 | 描述 |
username | 从身份验证阶段找到的当前主体标识符。 |
attributes | 由 CAS 构建的用于构造属性解析查询的查询属性Map。 |
logger | 负责发出日志消息的对象,例如 logger.info(...) |
properties | CAS 配置属性。 |
appContext | ApplicationContext 类型下的当前和活动应用程序上下文。ApplicationContext |
要准备 CAS 以支持 Apache Groovy 并与之集成,请查看本指南。
1.2.2.5. JSON 格式
1.2.2.5.1. JSON 属性解析
以下配置介绍如何从 JSON 属性存储库中获取和检索属性。
如果您希望直接从静态 JSON 源中单独检索属性,则以下设置是相关的:
CAS 配置目录中提供了以下设置和属性:
必填
自选
笔记
下面列出的配置设置在 CAS 配置元数据中标记为 Required。此标志表示可能需要该设置的存在才能激活或影响 CAS 功能的行为,并且通常应进行审查、可能拥有和调整。如果为该设置分配了默认值,则无需严格将该设置放在配置副本中,但仍应对其进行检查以确保它符合您的部署预期。
Show entries
搜索:
· cas.authn.attribute-repository.json[0].location= 在 CAS 能够自动监视底层资源的更改并动态检测更新和修改的情况和场景中,您可以将以下设置指定为环境变量或系统属性,其值为 false,以禁用资源观察程序: org.apereo.cas.configuration.model.core.authentication.JsonPrincipalAttributesProperties. 如何配置此属性? |
显示 1 到 1 的 1 个条目
上一页1下一页
文件格式可以是:
1 2 3 4 5 6 7 8 9 10 | { "user1": { "firstName":["Json1"], "lastName":["One"] }, "user2": { "firstName":["Json2"], "eduPersonAffiliation":["employee", "student"] }} |
1.2.2.6. REST
1.2.2.6.1. REST 属性解析
以下配置介绍如何从 REST 属性存储库中获取和检索属性。
CAS 配置目录中提供了以下设置和属性:
必填
自选
笔记
下面列出的配置设置在 CAS 配置元数据中标记为 Required。此标志表示可能需要该设置的存在才能激活或影响 CAS 功能的行为,并且通常应进行审查、可能拥有和调整。如果为该设置分配了默认值,则无需严格将该设置放在配置副本中,但仍应对其进行检查以确保它符合您的部署预期。
Show entries
搜索:
· cas.authn.attribute-repository.rest[0].url= 用于联系和检索属性的终端节点 URL。 此设置支持 Spring 表达式语言。 org.apereo.cas.configuration.model.core.authentication.RestPrincipalAttributesProperties. 如何配置此属性? |
显示 1 到 1 的 1 个条目
上一页1下一页
身份验证用户 ID 以 username 下的请求参数的形式传递。响应应为 JSON 映射,如下所示:
1 2 3 4 5 | { "name" : "JohnSmith", "age" : 29, "messages": ["msg 1", "msg 2", "msg 3"]} |
1.2.2.7. Grouper
1.2.2.7.1. Grouper 属性解析
以下配置描述了如何从 Grouper 属性存储库中获取和检索属性。
Apache Maven
Gradle
BOM - Spring
BOM - Gradle
资源
1 2 3 4 5 6 7 8 9 10 | dependencies { /* The following platform references should be included automatically and are listed here for reference only. implementation enforcedPlatform("org.apereo.cas:cas-server-support-bom:${project.'cas.version'}") implementation platform(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES) */ implementation "org.apereo.cas:cas-server-support-grouper"} |
此选项从 Grouper 中读取给定 CAS 主体的所有组,并将它们作为 grouperGroups 多值属性下的 CAS 属性采用。
CAS 配置目录中提供了以下设置和属性:
自选
笔记
下面列出的配置设置在 CAS 配置元数据中标记为 Optional(可选)。This标志表示在最终用户 CAS 配置中不需要立即存在该设置,因为分配了默认值,或者该功能的激活不受设置值有条件地控制。换句话说,仅当需要修改默认值或需要打开由设置控制的功能时,才应在配置中包含此字段。
Show entries
搜索:
· cas.authn.attribute-repository.grouper.id= 可以为此字段分配一个值,以唯一标识此解析程序。 org.apereo.cas.configuration.model.core.authentication.GrouperPrincipalAttributesProperties. 如何配置此属性? |
· cas.authn.attribute-repository.grouper.order=0 此属性存储库在存储库链中的顺序。可用于在 chain 中显式定位此源并影响合并策略。 org.apereo.cas.configuration.model.core.authentication.GrouperPrincipalAttributesProperties. 如何配置此属性? |
· cas.authn.attribute-repository.grouper.parameters= 定义为 Map 的自定义参数,以传递到属性存储库,该存储库最终将传递到 grouper 客户端。Key 是参数名称,value 是参数值。 org.apereo.cas.configuration.model.core.authentication.GrouperPrincipalAttributesProperties. 如何配置此属性? |
· cas.authn.attribute-repository.grouper.state=active 是否启用基于此源的属性解析。可用值如下: ACTIVE活动且已启用的存储库,默认情况下会自动调用。 DISABLED属性存储库已禁用,不会用于解析人员和属性。 STANDBY存储库处于半启用状态,仅在明确请求时等待按需调用,并且不会注册到解决计划中。 org.apereo.cas.configuration.model.core.authentication.GrouperPrincipalAttributesProperties. 如何配置此属性? |
· cas.authn.attribute-repository.grouper.subject-type=SUBJECT_ID 接受的值为: SUBJECT_IDENTIFIER、 SUBJECT_ATTRIBUTE_NAME、 SUBJECT_ID。 org.apereo.cas.configuration.model.core.authentication.GrouperPrincipalAttributesProperties. 如何配置此属性? |
显示 1 到 5 的 6 个条目
上一页12下一页
您还需要确保 grouper.client.properties 在 Classpath (即 src/main/resources) 上可用,并具有以下配置的属性:
1 2 3 | # grouperClient.webService.url = http://192.168.99.100:32768/grouper-ws/servicesRest # grouperClient.webService.login = banderson # grouperClient.webService.password = password |
您还可以考虑通过修改
/src/main/resources/grouper.client.properties 来外部化 Grouper 客户端配置文件,以包含以下内容:
1 | grouperClient.config.hierarchy = classpath:/grouper.client.base.properties,file:/etc/cas/config/grouper.client.properties |
…其中
/etc/cas/config/grouper.client.properties 将包含实际的 Grouper 相关设置。
1.2.2.7.2. 故障排除
要启用其他日志记录,请配置 log4j 配置文件以添加以下级别:
1 2 3 4 5 6 | ... ... |
1.2.2.8. Redis
1.2.2.8.1. Redis 属性解析
以下配置介绍如何从 Redis 属性存储库中获取和检索属性。
Apache Maven
Gradle
BOM - Spring
BOM - Gradle
资源
1 2 3 4 5 6 7 8 9 10 | dependencies { /* The following platform references should be included automatically and are listed here for reference only. implementation enforcedPlatform("org.apereo.cas:cas-server-support-bom:${project.'cas.version'}") implementation platform(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES) */ implementation "org.apereo.cas:cas-server-support-redis-authentication" } |
CAS 配置目录中提供了以下设置和属性:
必填
自选
笔记
下面列出的配置设置在 CAS 配置元数据中标记为 Required。此标志表示可能需要该设置的存在才能激活或影响 CAS 功能的行为,并且通常应进行审查、可能拥有和调整。如果为该设置分配了默认值,则无需严格将该设置放在配置副本中,但仍应对其进行检查以确保它符合您的部署预期。
Show entries
搜索:
· cas.authn.attribute-repository.redis[0].cluster.nodes.host= 服务器的主机地址。 org.apereo.cas.configuration.model.support.redis.RedisClusterNodeProperties. 如何配置此属性? |
· cas.authn.attribute-repository.redis[0].cluster.nodes.port= 服务器的端口号。 org.apereo.cas.configuration.model.support.redis.RedisClusterNodeProperties. 如何配置此属性? |
· cas.authn.attribute-repository.redis[0].cluster.nodes.replica-of= 设置 master 节点的 id。 org.apereo.cas.configuration.model.support.redis.RedisClusterNodeProperties. 如何配置此属性? |
· cas.authn.attribute-repository.redis[0].cluster.nodes.type= 指示此节点的类型/角色。接受的值为 MASTER, REPLICA 。 org.apereo.cas.configuration.model.support.redis.RedisClusterNodeProperties. 如何配置此属性? |
· cas.authn.attribute-repository.redis[0].cluster.password= 集群连接的密码。 org.apereo.cas.configuration.model.support.redis.RedisClusterProperties. 如何配置此属性? |
显示 1 到 5 个条目,共 14 个条目
上一页123下一页
1.2.2.9. Okta
1.2.2.9.1. Okta 属性解析
以下配置描述了如何从 Okta 实例中获取和检索属性。
Apache Maven
Gradle
BOM - Spring
BOM - Gradle
资源
1 2 3 4 5 6 7 8 9 10 | dependencies { /* The following platform references should be included automatically and are listed here for reference only. implementation enforcedPlatform("org.apereo.cas:cas-server-support-bom:${project.'cas.version'}") implementation platform(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES) */ implementation "org.apereo.cas:cas-server-support-okta-authentication" } |
CAS 配置目录中提供了以下设置和属性:
必填
自选
笔记
下面列出的配置设置在 CAS 配置元数据中标记为 Required。此标志表示可能需要该设置的存在才能激活或影响 CAS 功能的行为,并且通常应进行审查、可能拥有和调整。如果为该设置分配了默认值,则无需严格将该设置放在配置副本中,但仍应对其进行检查以确保它符合您的部署预期。
Show entries
搜索:
· cas.authn.attribute-repository.okta.client-id= 与私有密钥结合使用的 Okta 客户端 ID。 org.apereo.cas.configuration.model.support.okta.OktaPrincipalAttributesProperties. 如何配置此属性? |
· cas.authn.attribute-repository.okta.organization-url= Okta 域。 org.apereo.cas.configuration.model.support.okta.OktaPrincipalAttributesProperties. 如何配置此属性? |
· cas.authn.attribute-repository.okta.private-key.location= 在 CAS 能够自动监视底层资源的更改并动态检测更新和修改的情况和场景中,您可以将以下设置指定为环境变量或系统属性,其值为 false,以禁用资源观察程序: org.apereo.cas.configuration.model.SpringResourceProperties. 如何配置此属性? |
· cas.authn.attribute-repository.okta.scopes= Okta 允许您使用范围限定的 OAuth 2.0 访问令牌与 Okta API 进行交互。每个访问令牌都使持有者能够在特定 Okta 端点上执行特定操作,该功能由访问令牌包含的范围控制。范围仅在使用 client id 和 private-key 时使用。 org.apereo.cas.configuration.model.support.okta.OktaPrincipalAttributesProperties. 如何配置此属性? |
· cas.authn.attribute-repository.okta.username-attribute=username 用于获取属性所依据的 username 属性。 org.apereo.cas.configuration.model.support.okta.OktaPrincipalAttributesProperties. 如何配置此属性? |
显示 1 到 5 个条目中的 5 个
上一页1下一页
1.2.2.10. Apache Syncope
1.2.2.10.1. Apache Syncope 属性解析
通过在 WAR 覆盖中包含以下依赖项来启用支持:
Apache Maven
Gradle
BOM - Spring
BOM - Gradle
资源
1 2 3 4 5 6 7 8 9 10 | dependencies { /* The following platform references should be included automatically and are listed here for reference only. implementation enforcedPlatform("org.apereo.cas:cas-server-support-bom:${project.'cas.version'}") implementation platform(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES) */ implementation "org.apereo.cas:cas-server-support-syncope-authentication"} |
以下配置描述了如何从 Apache Syncope 获取和检索属性。
CAS 配置目录中提供了以下设置和属性:
必填
自选
笔记
下面列出的配置设置在 CAS 配置元数据中标记为 Required。此标志表示可能需要该设置的存在才能激活或影响 CAS 功能的行为,并且通常应进行审查、可能拥有和调整。如果为该设置分配了默认值,则无需严格将该设置放在配置副本中,但仍应对其进行检查以确保它符合您的部署预期。
Show entries
搜索:
· cas.authn.attribute-repository.syncope.basic-auth-password= 指定 REST 身份验证的密码。 org.apereo.cas.configuration.model.support.syncope.SyncopePrincipalAttributesProperties. 如何配置此属性? |
· cas.authn.attribute-repository.syncope.basic-auth-username= 指定 REST 身份验证的用户名。 org.apereo.cas.configuration.model.support.syncope.SyncopePrincipalAttributesProperties. 如何配置此属性? |
· cas.authn.attribute-repository.syncope.domain=Master 用于身份验证等的 Syncope 域。多个域可以用逗号分隔。每个域条目都会导致 CAS 进行单独的身份验证尝试和事务。 org.apereo.cas.configuration.model.support.syncope.SyncopePrincipalAttributesProperties. 如何配置此属性? |
· cas.authn.attribute-repository.syncope.search-filter=username=={user} 用于搜索的用户 FIQL 过滤器。语法是 username=={user} 或 username=={0}。 org.apereo.cas.configuration.model.support.syncope.SyncopePrincipalAttributesProperties. 如何配置此属性? |
· cas.authn.attribute-repository.syncope.url= 用于 REST 的 Syncope 实例 URL。 此设置支持 Spring 表达式语言。 org.apereo.cas.configuration.model.support.syncope.SyncopePrincipalAttributesProperties. 如何配置此属性? |
显示 1 到 5 个条目中的 5 个
上一页1下一页
1.2.2.11. Microsoft Entra
1.2.2.11.1. Microsoft Azure Active Directory 属性解析
以下配置介绍如何从 Microsoft Azure Active Directory 属性存储库中获取和检索属性。
Apache Maven
Gradle
BOM - Spring
BOM - Gradle
资源
1 2 3 4 5 6 7 8 9 10 | dependencies { /* The following platform references should be included automatically and are listed here for reference only. implementation enforcedPlatform("org.apereo.cas:cas-server-support-bom:${project.'cas.version'}") implementation platform(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES) */ implementation "org.apereo.cas:cas-server-support-azuread-authentication"} |
CAS 配置目录中提供了以下设置和属性:
必填
自选
笔记
下面列出的配置设置在 CAS 配置元数据中标记为 Required。此标志表示可能需要该设置的存在才能激活或影响 CAS 功能的行为,并且通常应进行审查、可能拥有和调整。如果为该设置分配了默认值,则无需严格将该设置放在配置副本中,但仍应对其进行检查以确保它符合您的部署预期。
Show entries
搜索:
· cas.authn.attribute-repository.azure-active-directory[0].client-id= Microsoft Azure 门户中已注册应用程序的客户端 ID。 此设置支持 Spring 表达式语言。 org.apereo.cas.configuration.model.support.azuread.AzureActiveDirectoryAttributesProperties. 如何配置此属性? |
· cas.authn.attribute-repository.azure-active-directory[0].client-secret= Microsoft Azure 门户中已注册应用程序的客户端密钥。 此设置支持 Spring 表达式语言。 org.apereo.cas.configuration.model.support.azuread.AzureActiveDirectoryAttributesProperties. 如何配置此属性? |
显示 1 到 2 的 2 个条目
上一页1下一页
1.2.2.12. 自定义
1.2.2.12.1. 自定义属性解析
您还可以设计自己的属性存储库和主体解析实现并将其注入到 CAS 中,这些 CAS 本身将处理获取属性和解析人员等。为此,您需要设计一个大致符合以下内容的配置类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | package org.apereo.cas.custom; @AutoConfiguration@EnableConfigurationProperties(CasConfigurationProperties.class)public class MyConfiguration { @Bean public PersonAttributeDao myPersonAttributeDao() { return new MyPersonAttributeDao(...); } @Bean public PersonDirectoryAttributeRepositoryPlanConfigurer myAttributeRepositoryPlanConfigurer( @Qualifier("myPersonAttributeDao") final PersonAttributeDao myPersonAttributeDao) { return plan -> plan.registerAttributeRepository(myPersonAttributeDao); }} |
请参阅本指南,了解有关如何将配置注册到 CAS 运行时的更多信息。