CAS单点登录(第7版)9.属性

news2025/2/22 9:08:27

如有疑问,请看视频:CAS单点登录(第7版)

  1. 属性
    1. 属性定义
      1. 概述
        1. 属性定义

从身份验证或属性存储库源获取和解析 CAS 中属性的定义时,往往使用其名称进行定义和引用,而无需任何其他元数据或修饰。例如,您可能希望检索 uid 属性和 virtuallyrename 并将其全局映射到 userIdentifier 属性或特定应用程序集成。对于大多数用例,此配置工作得相当轻松,但是,根据目标应用程序的性质和用于完成集成的身份验证协议,在与依赖方共享和发布时,可能会施加额外的要求,并且可能必须指定以定义具有附加指针的属性。例如,SAML2 服务提供商可能需要 eduPersonPrincipalName 的 scoped 属性,该属性的值始终由 uid 属性确定,并且始终提供特殊的友好名称,而不管目标应用程序如何。

虽然有关给定属性的元数据片段可以在 CAS 配置设置中全局定义,也可以在服务定义中定义,但属性定义存储允许描述有关必要属性的元数据,并在属性解析和发布期间考虑特殊修饰。属性定义存储的规范是完全可选的,存储可以不包含任何属性定义。

CAS 配置目录中提供了以下设置和属性:

  1. 必填

下面列出的配置设置在 CAS 配置元数据中标记为 Required。此标志表示可能需要该设置的存在才能激活或影响 CAS 功能的行为,并且通常应进行审查、可能拥有和调整。如果为该设置分配了默认值,则无需严格将该设置放在配置副本中,但仍应对其进行检查以确保它符合您的部署预期。

Show  entries

搜索:

·  cas.authn.attribute-repository.attribute-definition-store.json.location=

在 CAS 能够自动监视底层资源的更改并动态检测更新和修改的情况和场景中,您可以将以下设置指定为环境变量或系统属性,其值为 false,以禁用资源观察程序:org.apereo.cas.util.io.PathWatcherService。

 org.apereo.cas.configuration.model.SpringResourceProperties.

如何配置此属性?

显示 1 到 1 的 1 个条目

上一页1下一页

  1. 笔记

配置元数据

本节中列出的配置属性集合是从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. 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。确定如果属性只有一个值,则是否应将该属性生成为单值声明。

如果属性定义要生成值,则应按给定的顺序进行以下操作:

  1. 根据属性定义中指定的attribute设置(如果有)生成属性值。
  2. 根据属性定义中指定的script设置(如果有)生成属性值。
  3. 根据属性定义中指定的patterns设置(如果有)生成属性值。
  4. 根据属性定义中指定的scoped设置(如果有)生成属性值。
  5. 根据属性定义中指定的 patternFormat 设置(如果有)生成属性值。
  6. 根据属性定义中指定的encrypted设置(如果有)生成属性值。
  7. 根据属性定义中指定的 canonicalizationMode 设置(如果有)生成属性值。
  8. 根据属性定义中指定的flattened设置(如果有)生成属性值。

  1. 基本

为 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" ] ]

  }...

  1. 加密

与上述相同的用例,除了属性值将使用服务定义的公钥进行加密和编码:

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

  1. 模式格式

定义属性定义以根据模式格式生成值:

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。

  1. 嵌入式脚本

与上述相同的用例,除了属性值由嵌入式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。

  1. 外部脚本

与上述相同的用例,除了属性值由外部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。

  1. 正则表达式模式

定义属性定义以根据模式匹配规则有条件地生成值。如果属性定义要从现有的已解析属性构建其值,则根据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集成,请查看本指南。

  1. 扁平

如果为属性定义组装的属性值集合最终包含多个值,则可以指示属性定义使用给定的分隔符将所有值展平为单个值。

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. 自定义属性定义

您可以使用 CAS 动态设计和注入自己的属性定义。首先,您需要设计一个 @AutoConfiguration 类来包含您自己的 AttributeDefinitionStoreConfigurer 实现:

1

2

3

4

5

6

7

8

@AutoConfiguration

public class MyConfiguration {

    @Bean

    public AttributeDefinitionStoreConfigurer myAttributeDefinitionStore() {

        ...

}

}

您的配置类需要向 CAS 注册。有关更多详细信息,请参阅本指南。

    1. 属性解析
      1. 概述
        1. 属性解析

属性解析策略由 Person Directory 系列组件控制。该框架支持 LDAP 和 JDBC 属性解析、缓存、来自多个属性源的属性聚合等。

 默认缓存策略

默认情况下,属性缓存到 SSO Session的长度。这意味着,虽然 Person Directory 提供的基础组件可能具有不同的缓存模型,但默认情况下,从 CAS 的角度来看,只要 SSO Session存在,就不会在后续请求中刷新和检索属性。

          1. 执行器端点

CAS 提供以下端点:

  GET

/cas/actuator/resolveAttributes/{username} 

解析 user 的主体属性。

  DELETE

/cas/actuator/personDirectory/{username} 

  GET

/cas/actuator/personDirectory/{username} 

          1. Person Directory人员目录

用于从各种基础来源解析人员和属性的框架。它由一组组件组成,这些组件从 JDBC、LDAP 等中检索、缓存、解析、聚合、合并人员属性。

CAS 配置目录中提供了以下设置和属性:

必填

自选

Groovy 脚本

主体转换

笔记

下面列出的配置设置在 CAS 配置元数据中标记为 Required。此标志表示可能需要该设置的存在才能激活或影响 CAS 功能的行为,并且通常应进行审查、可能拥有和调整。如果为该设置分配了默认值,则无需严格将该设置放在配置副本中,但仍应对其进行检查以确保它符合您的部署预期。

Show  entries

搜索:

·  cas.person-directory.principal-transformation.groovy.location=

在 CAS 能够自动监视底层资源的更改并动态检测更新和修改的情况和场景中,您可以将以下设置指定为环境变量或系统属性,其值为 false,以禁用资源观察程序:org.apereo.cas.util.io.PathWatcherService。

 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. 属性存储库

控制主体解析进程从属性源检索的身份验证属性集,除非特定身份验证方案另有说明。

如果定义了多个属性存储库源,则会将它们添加到列表中,并缓存和合并其结果。

以下选项可用于获取 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. 存储库
        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. LDAP 协议
          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=

您还可以在 file:/path/to/GroovyScript.groovy的语法中提供外部 groovy 脚本,以动态地完全构建最终的过滤器模板。

 org.apereo.cas.configuration.model.support.ldap.LdapPrincipalAttributesProperties.

如何配置此属性?

显示 1 到 5 个条目中的 5 个

上一页1下一页

        1. JDBC
          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. 单排

旨在处理存在一行到一个用户的映射的表。此表格格式的一个示例是:

uid

first_name

last_name

电子邮件

jsmith

John

Smith

jsmith@example.org

            1. 多行

旨在处理存在一行到一个用户的映射的表。此表格格式的一个示例是:

uid

attr_name

attr_value

jsmith

first_name

John

jsmith

last_name

Smith

jsmith

email

jsmith@example.org

您需要在配置中定义列映射,以将 attr_name 列映射到 attr_value 列

            1. 例子

假设 CAS 配置为对 Active Directory 进行身份验证。其详细信息在下面定义的帐户通过 sAMAccountName 进行身份验证。

属性

价值

sAMAccountName

johnsmith

cn

John Smith

            1. 示例 #1

如果解析程序配置为使用 sAMAccoutName 作为主体 ID 的属性,则当身份验证完成时,解析程序会尝试从属性存储库源构造属性,它将 sAMAccoutName 视为属性,并看到主体 ID 将由 sAMAccoutName 创建。因此,它将从属性中删除 sAMAccoutName。最终结果是 id 为 johnsmith 的主体,其 cn 属性为 John Smith。

            1. 示例 #2

如果解析程序配置为使用 cn 作为主体 ID 的属性,则在身份验证完成后,解析程序将尝试从属性存储库源构造属性。然后,它将 sAMAccoutName 视为属性,并看到主体 ID 将由 cn.因此,它将从属性中删除 cn。最终结果是 id 为 John Smith的主体,其 sAMAccountName 属性为 johnsmith。

        1. Groovy
          1. Groovy 属性解析

以下配置描述了如何从 Groovy 属性存储库中获取和检索属性。

CAS 配置目录中提供了以下设置和属性:

必填

自选

Groovy 脚本

笔记

下面列出的配置设置在 CAS 配置元数据中标记为 Required。此标志表示可能需要该设置的存在才能激活或影响 CAS 功能的行为,并且通常应进行审查、可能拥有和调整。如果为该设置分配了默认值,则无需严格将该设置放在配置副本中,但仍应对其进行检查以确保它符合您的部署预期。

Show  entries

搜索:

·  cas.authn.attribute-repository.groovy[0].location=

在 CAS 能够自动监视底层资源的更改并动态检测更新和修改的情况和场景中,您可以将以下设置指定为环境变量或系统属性,其值为 false,以禁用资源观察程序:org.apereo.cas.util.io.PathWatcherService。

 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. JSON 格式
          1. JSON 属性解析

以下配置介绍如何从 JSON 属性存储库中获取和检索属性。

如果您希望直接从静态 JSON 源中单独检索属性,则以下设置是相关的:

CAS 配置目录中提供了以下设置和属性:

必填

自选

笔记

下面列出的配置设置在 CAS 配置元数据中标记为 Required。此标志表示可能需要该设置的存在才能激活或影响 CAS 功能的行为,并且通常应进行审查、可能拥有和调整。如果为该设置分配了默认值,则无需严格将该设置放在配置副本中,但仍应对其进行检查以确保它符合您的部署预期。

Show  entries

搜索:

·  cas.authn.attribute-repository.json[0].location=

在 CAS 能够自动监视底层资源的更改并动态检测更新和修改的情况和场景中,您可以将以下设置指定为环境变量或系统属性,其值为 false,以禁用资源观察程序:org.apereo.cas.util.io.PathWatcherService。

 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. REST
          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. Grouper
          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. 故障排除

要启用其他日志记录,请配置 log4j 配置文件以添加以下级别:

1

2

3

4

5

6

...

<Logger name="edu.internet2.middleware" level="debug" additivity="false">

    <AppenderRef ref="casConsole"/>

<AppenderRef ref="casFile"/>

</Logger>

...

        1. Redis
          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. Okta
          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.util.io.PathWatcherService。

 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. Apache Syncope
          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. Microsoft Entra
          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. 自定义
          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 运行时的更多信息。

        1. 选择
          1. 属性存储库选择

通过主体解析过程从专用属性存储库中检索的主体属性将通过以下策略激活和选择:

在 CAS 配置中定义并保持活动状态的属性存储库将由属性解析引擎自动选择和调用。

还可以选择将属性存储库分配给服务定义,然后仅在为请求激活应用程序注册策略时激活和调用属性存储库。

还可以选择映射到身份验证方法和处理程序的属性存储库。当仅在使用特定身份验证方法对用户进行身份验证时调用属性存储库时,这非常有用。当仅在使用特定身份验证方法对用户进行身份验证时调用属性存储库时,这非常有用。

CAS 配置目录中提供了以下设置和属性:

必填

自选

Groovy 脚本

主体转换

笔记

下面列出的配置设置在 CAS 配置元数据中标记为 Required。此标志表示可能需要该设置的存在才能激活或影响 CAS 功能的行为,并且通常应进行审查、可能拥有和调整。如果为该设置分配了默认值,则无需严格将该设置放在配置副本中,但仍应对其进行检查以确保它符合您的部署预期。

Show  entries

搜索:

·  cas.person-directory.principal-transformation.groovy.location=

在 CAS 能够自动监视底层资源的更改并动态检测更新和修改的情况和场景中,您可以将以下设置指定为环境变量或系统属性,其值为 false,以禁用资源观察程序:org.apereo.cas.util.io.PathWatcherService。

 org.apereo.cas.configuration.model.core.authentication.GroovyPrincipalTransformationProperties.

如何配置此属性?

显示 1 到 1 的 1 个条目

上一页1下一页

          1. 自定义

如果您希望设计自己的属性仓库选择机制,您可以遵循以下方法:

1

2

3

4

@Beanpublic AttributeRepositoryResolver attributeRepositoryResolver() {

    return new MyAttributeRepositoryResolver();}

请参阅本指南,了解有关如何将配置注册到 CAS 运行时的更多信息。

        1. Filtering
          1. 属性存储库筛选

主体属性存储库可以查阅由 Person Directory 定义和控制的属性源。假设 JSON 属性存储库源是使用标识符 MyJsonRepository 定义的,则以下定义将忽略所有以前解析的属性,并再次联系 MyJsonRepository以获取属性并将其缓存 30 分钟。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

{

  "@class" : "org.apereo.cas.services.CasRegisteredService",

  "serviceId" : "^(https|imaps)://.*",

  "name" : "HTTPS and IMAPS",

  "id" : 1,

  "attributeReleasePolicy" : {

    "@class" : "org.apereo.cas.services.ReturnAllAttributeReleasePolicy",

    "principalAttributesRepository" : {

        "@class" : "org.apereo.cas.authentication.principal.cache.CachingPrincipalAttributesRepository",

        "timeUnit" : "MINUTES",

        "expiration" : 30,

        "ignoreResolvedAttributes": true,

        "attributeRepositoryIds": ["java.util.HashSet", [ "MyJsonRepository" ]],

        "mergingStrategy" : "MULTIVALUED"

    }

  }}

下面是一个类似的示例,其中关闭了服务的缓存,其中 CAS 尝试将以前解析的属性与标识为 MyJsonRepository 的 attributerepository 中的结果组合在一起。预期是,在身份验证阶段,属性源 MyJsonRepository 被排除在主体解析之外,并且只应在发布时为此服务联系:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

{

  "@class" : "org.apereo.cas.services.CasRegisteredService",

  "serviceId" : "^(https|imaps)://.*",

  "name" : "HTTPS and IMAPS",

  "id" : 1,

  "attributeReleasePolicy" : {

    "@class" : "org.apereo.cas.services.ReturnAllAttributeReleasePolicy",

    "principalAttributesRepository" : {

        "@class" : "org.apereo.cas.authentication.principal.DefaultPrincipalAttributesRepository",

        "ignoreResolvedAttributes": false,

        "attributeRepositoryIds": ["java.util.HashSet", [ "MyJsonRepository" ]],

        "mergingStrategy" : "MULTIVALUED"

    }

  }}

    1. 属性发布
      1. 概述
        1. 属性发布

属性被返回到作用域服务中,并经过一个两步的过程:

  1. 属性解析:在建立主体时完成,通常通过 PrincipalResolver 组件完成,其中属性是从各种来源解析的。
  2. 属性发布:采用者必须显式配置服务的属性发布,以便在验证响应中将解析的属性发布到服务。

 服务管理

属性发布也可以通过服务管理工具服务与应用进行配置。

          1. 主体ID 属性

确定受 CAS 保护的应用程序应如何接收已验证的用户 ID。有关更多信息,请参阅本指南。

          1. 属性发布策略

确定 CAS 应如何向应用程序释放属性。有关更多信息,请参阅本指南。

          1. 属性同意

提供强制用户同意属性发布的功能。有关更多信息,请参阅本指南。

          1. 缓存属性

控制应如何缓存 CAS 解析的属性。有关更多信息,请参阅本指南。

          1. 加密属性

默认情况下,CAS 支持有条件地加密某些属性,例如代理授予票证和凭证。属性编码器的默认实现将使用每个服务的密钥对来加密敏感属性。请参阅本指南以了解更多信息。

          1. 属性定义

CAS 属性可以使用其他元数据进行修饰,稍后可以根据协议的要求以及与目标应用程序集成的性质使用这些元数据。要了解更多信息,请参阅本指南。

      1. 主体ID
        1. 概述
          1. 主体ID 属性

已注册的 CAS 应用程序能够允许配置用户名属性提供程序,该属性提供程序控制返回给应用程序的指定用户标识符。默认情况下,用户标识符是经过身份验证的 CAS 委托人 ID,但它可以选择基于已为委托人提供并解析的现有属性。

更实际地说,username 属性 provider 在所使用的身份验证协议的上下文中进行转换和应用。例如,当身份验证流处于 CAS 协议的上下文中时,此组件确定应将返回到应用程序的最终 CAS 验证有效负载中的 <cas:user> 标记内的内容。CAS 支持的每个身份验证协议可能都有一个等效的概念(即 SAML2 NameID 或 OpenID Connect sub声明),然后由用户名属性提供程序进行映射和转换。

 主体 ID As 属性

您还可以在最终 CAS 验证负载中将经过身份验证的主体 ID 作为额外属性返回,通常在使用 CAS 协议时。请参阅本指南以了解更多信息。

许多提供商能够对返回的最终用户 ID 执行规范化,以将其转换为大写/小写。这由 canonicalizationMode 记录,其允许的值为 UPPER、LOWER 或 NONE。

          1. 供应商

以下提供程序可用于生成用户名。

供应商

描述

Default

请参阅本指南

属性

请参阅本指南

Groovy

请参阅本指南

匿名

请参阅本指南

加密

请参阅本指南

静态

请参阅本指南

        1. Default
          1. 默认委托人 ID

不需要显式定义的默认配置返回解析主体ID作为此服务的用户名。。

1

2

3

4

5

6

7

8

9

10

11

12

{

  "@class" : "org.apereo.cas.services.CasRegisteredService",

  "serviceId" : "sample",

  "name" : "sample",

  "id" : 100,

  "description" : "sample",

  "usernameAttributeProvider" : {

    "@class" : "org.apereo.cas.services.DefaultRegisteredServiceUsernameProvider",

    "canonicalizationMode" : "NONE",

    "scope": "example.org"

  }

}

如果你不需要调整这个 provider 的行为(即修改canonicalization模式),那么你可以完全省略这个块。此外,如果您不需要将最终值的范围限定为定义的值,您也可以省略 scope 值。

        1. 属性
          1. 基于属性的主体 ID

返回已为委托人解析为此服务的用户名的属性。如果 attribute不可用,则将使用默认委托人 ID。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

{

  "@class" : "org.apereo.cas.services.CasRegisteredService",

  "serviceId" : "sample",

  "name" : "sample",

  "id" : 1,

  "description" : "sample",

  "usernameAttributeProvider" : {

    "@class" : "org.apereo.cas.services.PrincipalAttributeRegisteredServiceUsernameProvider",

    "usernameAttribute" : "cn",

    "canonicalizationMode" : "UPPER",

    "scope": "example.org",

    "removePattern": ""

  }}

以下设置和属性可用:

财产

描述

canonicalizationMode

自选。将用户名转换为大写或小写。允许的值为 UPPER、LOWER 或 NONE。

scope

自选。允许您通过将域附加到最终用户 ID 来将值的范围限定为给定域。

removePattern

自选。一种正则表达式模式,它将从最终用户 ID 中删除所有匹配项。

以下示例应该很有用:

属性

高深

从 resolved 属性 cn 中选择 user,并确保它已转换为大写字符串。

1

2

3

4

5

6

7

8

9

10

11

12

{

  "@class" : "org.apereo.cas.services.CasRegisteredService",

  "serviceId" : "sample",

  "name" : "sample",

  "id" : 1,

  "description" : "sample",

  "usernameAttributeProvider" : {

    "@class" : "org.apereo.cas.services.PrincipalAttributeRegisteredServiceUsernameProvider",

    "usernameAttribute" : "cn",

    "canonicalizationMode" : "UPPER"

  }

}

        1. Groovy 
          1. Groovy 主体 ID

返回 username 属性值作为 groovy 脚本执行的最终结果。Groovy 脚本,无论是内联的还是外部的,都将接收并有权访问以下变量绑定:

id:经过身份验证的委托人的现有标识符。

attributes:当前为主体解析的属性映射。

service:与已注册的服务定义匹配的服务对象。

logger:一个 logger 对象,能够提供 logger.info(...) 操作等。

内嵌

外部

将 groovy 脚本直接嵌入到服务配置中。

1

2

3

4

5

6

7

8

9

10

11

12

{

  "@class" : "org.apereo.cas.services.CasRegisteredService",

  "serviceId" : "sample",

  "name" : "sample",

  "id" : 600,

  "description" : "sample",

  "usernameAttributeProvider" : {

    "@class" : "org.apereo.cas.services.GroovyRegisteredServiceUsernameProvider",

    "groovyScript" : "groovy { return attributes['uid'][0] + '123456789' }",

    "canonicalizationMode" : "UPPER"

  }

}

请注意,上面示例中的 uid 属性在内部解析为多值属性,所有属性在被 CAS 获取时也应如此。因此,上面的示例使用 [0] 语法来获取属性的第一个值。

要准备 CAS 以支持 Apache Groovy 并与之集成,请查看本指南。

        1. 匿名
          1. 匿名主体 ID

以下选项可用于生成匿名用户名。

短暂的

持续

为用户名提供不透明的标识符。

1

2

3

4

5

6

7

8

9

10

{

  "@class" : "org.apereo.cas.services.CasRegisteredService",

  "serviceId" : "sample",

  "name" : "sample",

  "id" : 500,

  "description" : "sample",

  "usernameAttributeProvider" : {

    "@class" : "org.apereo.cas.services.AnonymousRegisteredServiceUsernameAttributeProvider"

  }}

        1. 加密
          1. 加密的委托人 ID

大多数(如果不是全部)username 属性提供程序都能够加密解析的用户名,前提是为服务定义提供了公钥。

密钥可以通过以下命令生成:

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

然后,为 CAS 中的服务定义配置公钥:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

{

  "@class" : "org.apereo.cas.services.CasRegisteredService",

  "serviceId" : "sample",

  "name" : "sample",

  "id" : 100,

  "description" : "sample",

  "usernameAttributeProvider" : {

    "@class" : "org.apereo.cas.services.DefaultRegisteredServiceUsernameProvider",

    "encryptUsername" : "true"

  },

  "publicKey" : {

    "@class" : "org.apereo.cas.services.RegisteredServicePublicKeyImpl",

    "location" : "classpath:public.key",

    "algorithm" : "RSA"

  }}

公钥组件的配置有资格使用 Spring 表达式语言语法。

然后,应用程序可以使用自己的私钥继续解密用户名。以下示例代码演示了如何在 Java 中完成此操作:

1

2

3

4

5

6

7

var casUsername = ...var privateKey = ...var cipher = Cipher.getInstance(privateKey.getAlgorithm());var cred64 = decodeBase64(encodedPsw);cipher.init(Cipher.DECRYPT_MODE, privateKey);var cipherData = cipher.doFinal(casUsername);return new String(cipherData);

        1. 静态
          1. 静态主体 ID

返回 username 属性的静态硬编码值。值可以使用 Spring 表达式语言语法。

1

2

3

4

5

6

7

8

9

10

{

  "@class" : "org.apereo.cas.services.CasRegisteredService",

  "serviceId" : "sample",

  "name" : "sample",

  "id" : 100,

  "usernameAttributeProvider" : {

    "@class" : "org.apereo.cas.services.StaticRegisteredServiceUsernameProvider",

    "value": "always-static-username"

  }}

您可以使用 Groovy 执行相同的任务,尽管此选项在性能方面效率略高。

      1. 发布策略
        1. 概述
          1. 属性发布策略

属性发布策略决定如何在 finalCAS 响应中选择属性并将其提供给给定应用程序。此外,每个策略都能够应用可选筛选器,以根据其值清除其属性。

所有属性发布策略都共享以下设置:

名字

价值

authorizedToReleaseCredentialPassword

Boolean 用于定义服务是否有权将凭证作为属性发布

authorizedToReleaseProxyGrantingTicket

Boolean 值,用于定义是否授权服务将代理授予票证 ID 作为属性发布

excludeDefaultAttributes

Boolean 用于定义此策略是否应排除要发布的默认全局属性包。

authorizedToReleaseAuthenticationAttributes

布尔值,用于定义此策略是否应排除 authentication/protocol 属性以进行发布。身份验证属性被视为未绑定到特定主体的属性,并定义有关身份验证事件本身的额外补充元数据,例如开始日期。

principalIdAttribute

您自己选择的属性名称,该名称将填充到最终的属性包中,其中包含经过 CAS 身份验证的主体标识符。

canonicalizationMode

将所有属性值转换为大写或小写。允许的值为 UPPER、LOWER 或 NONE。

 使用警告!

在打开上述设置之前,请非常仔细地考虑。盲目授权应用程序接收代理授权票证或用户凭证可能会产生安全泄漏和攻击的机会。确保您确实需要启用这些功能,并且您了解原因。尽可能避免随时随地,尤其是在共享用户凭证时。

CAS 区分了传达有关身份验证事件的元数据的属性与包含已验证主体的个人身份信息的属性。

            1. 执行器端点

CAS 提供以下端点:

  POST

/cas/actuator/releaseAttributes 

获取用户和应用程序的已发布属性的集合。

            1. 身份验证属性

在身份验证过程中,CAS会捕获和收集许多属性,以描述有关身份验证事件本身性质的元数据和其他属性。这些通常包括由底层协议记录和分类的属性或特定于 CAS 的属性,这些属性可能描述使用的凭证类型、成功执行的身份验证处理程序、身份验证的日期/时间等。

在一定程度上可以控制向服务提供商和应用程序发布身份验证属性。

CAS 配置目录中提供了以下设置和属性:

自选

笔记

下面列出的配置设置在 CAS 配置元数据中标记为 Optional(可选)。This标志表示在最终用户 CAS 配置中不需要立即存在该设置,因为分配了默认值,或者该功能的激活不受设置值有条件地控制。换句话说,仅当需要修改默认值或需要打开由设置控制的功能时,才应在配置中包含此字段。

Show  entries

搜索:

·  cas.authn.authentication-attribute-release.enabled=true

是否应将身份验证或协议属性发布给客户端。此标志专门处理非主体属性,或携带有关身份验证事件本身的元数据(这些元数据不严格绑定到主体或人员数据)的其他属性。此处的更改应考虑此类属性,而不管特定协议或身份验证流程(CAS、OIDC 等)如何。

 org.apereo.cas.configuration.model.core.authentication.AuthenticationAttributeReleaseProperties.

如何配置此属性?

·  cas.authn.authentication-attribute-release.never-release=

不应发布的身份验证属性列表。

 org.apereo.cas.configuration.model.core.authentication.AuthenticationAttributeReleaseProperties.

如何配置此属性?

·  cas.authn.authentication-attribute-release.only-release=

应是唯一释放的身份验证属性的列表。空列表表示应释放所有属性。

 org.apereo.cas.configuration.model.core.authentication.AuthenticationAttributeReleaseProperties.

如何配置此属性?

显示 1 到 3 个条目中的 3 个

上一页1下一页

协议/身份验证属性也可以基于每个服务有条件地释放。

            1. 主体属性

主体属性通常传达有关经过身份验证的用户的个人身份数据,例如地址、姓氏等。发布策略在 CAS 中提供,并记录在下面,以明确控制可能被授权发布到给定应用程序的属性集合。

 记得

根据使用的协议和向 CAS 注册的服务类型/类别(即依赖方),可能会提供其他发布策略,这些策略允许对属性发布进行更精细的控制,从而更好地满足手头的 particularauthentication 协议的需求。请记住通过访问和研究每个实验步骤的相应文档来验证 CAS 的属性发布功能。

政策

资源

默认捆绑包

请参阅此页面

全部拒绝

请参阅此页面

全部返回

请参阅此页面

返回静态

请参阅此页面

允许返回

请参阅此页面

返回加密

请参阅此页面

返回映射

请参阅此页面

退货链接

请参阅此页面

映射的 Groovy 文件

请参阅此页面

映射内联 Groovy

请参阅此页面

返回 MultiMapped

请参阅此页面

模式匹配

请参阅此页面

Groovy 脚本

请参阅此页面

REST

请参阅此页面

            1. 属性存储库筛选

可以为属性发布策略分配 principalAttributesRepository 来查阅由 Person Directory 属性 repositories 定义和控制的属性源,以获取、解析、缓存和发布属性。

要了解有关此主题的更多信息,请参阅本指南。

            1. 链接策略

属性发布策略可以链接在一起以处理多个规则。请参阅本指南以了解更多信息。

            1. 属性值筛选器

虽然每个策略都定义了给定服务可以允许哪些主体属性,但可以为每个策略设置可选的属性筛选器,以根据属性的值进一步清除属性。

请参阅本指南以了解更多信息。

        1. 默认捆绑包
          1. 属性发布策略 - 默认捆绑包

默认情况下,CAS 提供了向所有服务释放一组主体属性的功能。此捆绑包不是基于每个服务定义的,而是始终与服务的 specificrelease 策略生成的属性相结合,例如,您可以设计规则以始终将 givenName和 cn 释放给每个应用程序,并且另外允许某些应用程序根据其属性发布策略仅允许其他特定主体属性。

CAS 配置目录中提供了以下设置和属性:

自选

笔记

下面列出的配置设置在 CAS 配置元数据中标记为 Optional(可选)。This标志表示在最终用户 CAS 配置中不需要立即存在该设置,因为分配了默认值,或者该功能的激活不受设置值有条件地控制。换句话说,仅当需要修改默认值或需要打开由设置控制的功能时,才应在配置中包含此字段。

Show  entries

搜索:

·  cas.authn.attribute-repository.core.default-attributes-to-release=

默认情况下,CAS 提供了向所有服务释放一组主体属性的功能。此捆绑包不是基于每个服务定义的,而是始终与服务的特定发布策略生成的属性相结合,例如,您可以设计规则以始终将 givenName 和 cn 释放给每个应用程序,此外,根据其属性发布策略,仅允许某些应用程序的其他特定主体属性。

 org.apereo.cas.configuration.model.core.authentication.PrincipalAttributesCoreProperties.

如何配置此属性?

显示 1 到 1 的 1 个条目

上一页1下一页

        1. 全部拒绝
          1. 属性发布策略 - 全部拒绝

永远不要将主体属性返回给应用程序。请注意,此策略还会跳过并拒绝释放默认属性(如果有)。

1

2

3

4

5

6

7

8

9

10

{

  "@class" : "org.apereo.cas.services.CasRegisteredService",

  "serviceId" : "sample",

  "name" : "sample",

  "id" : 100,

  "description" : "sample",

  "attributeReleasePolicy" : {

    "@class" : "org.apereo.cas.services.DenyAllAttributeReleasePolicy"

  }}

        1. 全部返回
          1. 属性发布策略 - 全部返回

将所有已解析的委托人属性返回给服务,并选择性地从最终集合中排除属性。

1

2

3

4

5

6

7

8

9

10

{

  "@class" : "org.apereo.cas.services.CasRegisteredService",

  "serviceId" : "sample",

  "name" : "sample",

  "id" : 100,

  "attributeReleasePolicy" : {

    "@class" : "org.apereo.cas.services.ReturnAllAttributeReleasePolicy",

    "excludedAttributes": ["java.util.LinkedHashSet", ["cn"]]

  }}

        1. 返回静态
          1. 属性发布策略 - 返回静态

将 static 属性返回到服务,其中包含在服务定义中硬编码的值。

1

2

3

4

5

6

7

8

9

10

11

12

13

{

  "@class" : "org.apereo.cas.services.CasRegisteredService",

  "serviceId" : "sample",

  "name" : "sample",

  "id" : 100,

  "attributeReleasePolicy" : {

    "@class": "org.apereo.cas.services.ReturnStaticAttributeReleasePolicy",

    "allowedAttributes": {

      "@class": "java.util.LinkedHashMap",

      "permissions": [ "java.util.ArrayList", [ "read", "write", "admin" ] ]

    }

  }}

属性值可以使用 Spring 表达式语言语法。

        1. 允许返回
          1. 属性发布策略 - 允许返回

仅返回服务定义明确允许的 principal 属性。

Default

Groovy

1

2

3

4

5

6

7

8

9

10

{

  "@class" : "org.apereo.cas.services.CasRegisteredService",

  "serviceId" : "^https://app.example.org",

  "name" : "sample",

  "id" : 100,

  "attributeReleasePolicy" : {

    "@class" : "org.apereo.cas.services.ReturnAllowedAttributeReleasePolicy",

    "allowedAttributes" : [ "java.util.ArrayList", [ "cn", "mail", "sn" ] ]

  }}

此策略授权和允许发布的属性不一定作为解析的主体属性提供,并且可以使用属性定义存储动态解析。

        1. 返回加密
          1. 属性发布策略 - 返回加密

使用分配的注册服务公钥对 base-64 中所有允许的属性进行加密和编码。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

{

  "@class" : "org.apereo.cas.services.CasRegisteredService",

  "serviceId" : "sample",

  "name" : "sample",

  "id" : 100,

  "attributeReleasePolicy" : {

    "@class" : "org.apereo.cas.services.ReturnEncryptedAttributeReleasePolicy",

    "allowedAttributes" : [ "java.util.ArrayList", [ "cn", "mail", "sn" ] ]

  },

  "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

此策略授权和允许发布的属性不一定作为解析的主体属性提供,并且可以使用属性定义存储动态解析。

        1. 返回映射
          1. 属性发布策略 - 返回映射

此策略将返回 service 允许的主体属性的集合,但也允许在更精细的服务级别映射和“重命名”这些主体属性。

例如,以下配置将识别 resolvedattributes eduPersonAffiliation 和 groupMembership,然后将 affiliation 和 group 发布到配置的 Web 应用程序。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

{

  "@class" : "org.apereo.cas.services.CasRegisteredService",

  "serviceId" : "sample",

  "name" : "sample",

  "id" : 300,

  "description" : "sample",

  "attributeReleasePolicy" : {

    "@class" : "org.apereo.cas.services.ReturnMappedAttributeReleasePolicy",

    "allowedAttributes" : {

      "@class" : "java.util.TreeMap",

      "eduPersonAffiliation" : "affiliation",

      "groupMembership" : "group"

    }

  }}

此策略授权和允许发布的属性不一定作为解析的主体属性提供,并且可以使用属性定义存储动态解析。

        1. 退货链接
          1. 属性发布策略 - 退货链接

此策略将释放服务允许的主体属性的集合,从而允许基于一系列已解析的可用主体属性构建这些属性,这些属性被分配并链接到属性定义作为值的源。如果所有定义的属性都无法生成值,则不会释放定义的属性。

例如,以下配置将尝试释放属性component,从分配给其条目的内容(即 cn、givenName 等)获取其值。每个分配的属性(即 cn、givenName 等)都会被逐一尝试,第一个可以产生值的属性将用作 component 的属性值源。如果未找到匹配项,则不会释放 component。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

{

  "@class" : "org.apereo.cas.services.CasRegisteredService",

  "serviceId" : "sample",

  "name" : "sample",

  "id" : 300,

  "description" : "sample",

  "attributeReleasePolicy" : {

    "@class" : "org.apereo.cas.services.ReturnLinkedAttributeReleasePolicy",

    "allowedAttributes" : {

      "@class" : "java.util.TreeMap",

      "component" : ["java.util.ArrayList", ["cn", "givenName", "unknown", "firstName"]]

    }

  }}

如果 CAS 在其值为 bob 和 robert 的可用已解析属性池中具有属性 firstName,并且没有其他属性可用或可以生成值,则上述属性策略的结果将是授权释放值为 bob 和 robert 的 component。

        1. 映射的Groovy文件
          1. 属性发布策略 - 外部 Groovy

与内联 groovy 属性定义相同,只是 groovy 脚本也可以外部化为 .groovy 文件:

1

2

3

4

5

6

7

8

9

10

11

12

13

{

  "@class" : "org.apereo.cas.services.CasRegisteredService",

  "serviceId" : "sample",

  "name" : "sample",

  "id" : 300,

  "attributeReleasePolicy" : {

    "@class" : "org.apereo.cas.services.ReturnMappedAttributeReleasePolicy",

    "allowedAttributes" : {

      "@class" : "java.util.TreeMap",

      "uid" : "file:/etc/cas/sample.groovy"

    }

  }}

sample.groovy 脚本本身可能具有以下轮廓:

1

2

3

4

5

6

7

import java.util.*

def run(final Object... args) {

    def (attributes,logger) = args

    logger.debug("Current attributes are {}", attributes)

    return []}

 使用警告

激活此策略并非没有成本,因为 CAS 需要评估内联脚本、编译并运行它以供后续执行。虽然 compiledscript 被缓存并且应该有助于提高执行性能,但作为一般规则,您应该避免选择和设计复杂的脚本。

此组件的配置有资格使用 Spring 表达式语言语法。

要准备 CAS 以支持 Apache Groovy 并与之集成,请查看本指南。

        1. 映射内联Groovy
          1. 属性发布策略 - 内联 Groovy

映射的主体属性可能会从内联 groovy 脚本生成其值。

 使用警告

激活此策略并非没有成本,因为 CAS 需要评估内联脚本、编译并运行它以供后续执行。虽然 compiledscript 被缓存并且应该有助于提高执行性能,但作为一般规则,您应该避免选择和设计复杂的脚本。

基本

复杂

例如,如果您当前已解析值为 piper 的 uid 属性,则可以考虑以下操作:

1

2

3

4

5

6

7

8

9

10

11

12

13

{

  "@class" : "org.apereo.cas.services.CasRegisteredService",

  "serviceId" : "sample",

  "name" : "sample",

  "id" : 300,

  "attributeReleasePolicy" : {

    "@class" : "org.apereo.cas.services.ReturnMappedAttributeReleasePolicy",

    "allowedAttributes" : {

      "@class" : "java.util.TreeMap",

      "uid" : "groovy { return attributes['uid'].get(0) + ' is great' }"

    }

  }}

在上面的代码段中,uid 属性 name 的值被映射到内联 groovy 脚本的结果。内联脚本始终以语法 groovy {...} 开头,并将 resolvedattributes 的当前集合作为attributes绑定变量传递。脚本的结果可以是单个/值的集合。

上述配置将为应用程序生成一个 uid 属性,其值是 uid 的原始值加上单词 ' is great' 的串联, so the final result would be piper is great'。

要准备 CAS 以支持 Apache Groovy 并与之集成,请查看本指南。

        1. 返回 MultiMapped
          1. 属性发布策略 - 返回 MultiMapped

同一策略可能允许重命名属性定义并将其重新映射到多个属性名称,并将重复的属性值映射到不同的名称。

例如,以下配置将识别已解析的属性 eduPersonAffiliation,然后释放其值源自原始 eduPersonAffiliation 属性的 affiliation 和 personAffiliation,同时将 groupMembership 作为group发布。换句话说,eduPersonAffiliation 属性在两个不同的名称下发布两次,每个名称共享相同的值。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

{

  "@class" : "org.apereo.cas.services.CasRegisteredService",

  "serviceId" : "sample",

  "name" : "sample",

  "id" : 300,

  "attributeReleasePolicy" : {

    "@class" : "org.apereo.cas.services.ReturnMappedAttributeReleasePolicy",

    "allowedAttributes" : {

      "@class" : "java.util.TreeMap",

      "eduPersonAffiliation" : [ "java.util.ArrayList", [ "affiliation", "personAffiliation" ] ],

      "groupMembership" : "group"

    }

  }}

此策略授权和允许发布的属性不一定作为解析的主体属性提供,并且可以使用属性定义存储动态解析。

        1. 模式匹配
          1. 属性发布策略 - 模式匹配

仅当属性值与给定的正则表达式模式匹配时,此策略才允许释放定义的允许属性。如果属性值匹配成功,则策略能够对值应用转换规则,以提取和收集匹配的组,然后组合最终属性值。

例如,考虑一个经过身份验证的委托人,该委托人具有 memberOf 属性,其中包含 CN=g1,OU=example,DC=org 和 CN=g2,OU=example,DC=org 等值。以下策略对每个属性值应用定义的模式和转换。最终结果将是值为 g1@example.org 和 g2@example.org 的 memberOf属性。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

{

  "@class" : "org.apereo.cas.services.CasRegisteredService",

  "serviceId" : "sample",

  "name" : "sample",

  "id" : 300,

  "attributeReleasePolicy" : {

    "@class": "org.apereo.cas.services.PatternMatchingAttributeReleasePolicy",

    "allowedAttributes": {

        "@class": "java.util.TreeMap",

        "memberOf": {

            "@class": "org.apereo.cas.services.PatternMatchingAttributeReleasePolicy$Rule",

            "pattern": "^CN=(\\w+),\\s*OU=(\\w+),\\s*DC=(\\w+)",

            "transform": "${1}@${2}/${3}"

        }

    }

  }}

匹配的模式组通常从 1 开始。如果您需要引用整个匹配的区域,请使用 ${0}。

        1. Groovy 脚本
          1. 属性发布策略 - Groovy 脚本

让外部 Groovy 脚本决定如何释放主体属性。thiscomponent 的配置有资格使用 Spring 表达式语言语法。

1

2

3

4

5

6

7

8

9

10

{

  "@class" : "org.apereo.cas.services.CasRegisteredService",

  "serviceId" : "sample",

  "name" : "sample",

  "id" : 300,

  "attributeReleasePolicy" : {

    "@class" : "org.apereo.cas.services.GroovyScriptAttributeReleasePolicy",

    "groovyScript" : "classpath:/script.groovy"

  }}

脚本本身可以在 Groovy 中设计为:

1

2

3

4

5

6

7

import java.util.*

def run(final Object... args) {

    def (currentAttributes,logger,principal,service) = args

    logger.debug("Current attributes received are {}", currentAttributes)

    return [username:["something"], likes:["cheese", "food"], id:[1234,2,3,4,5], another:"attribute"]}

 使用警告

激活此策略并非没有成本,因为 CAS 需要评估内联脚本、编译并运行它以供后续执行。虽然 compiledscript 被缓存并且应该有助于提高执行性能,但作为一般规则,您应该避免选择和设计复杂的脚本。

以下参数将传递给脚本:

参数

描述

currentAttributes

当前已解决且可发布的属性Map。

logger

负责发出日志消息的对象,例如 logger.info(...)

principal

表示已验证的主体的对象。

service

表示注册表中相应服务定义的对象。

要准备 CAS 以支持 Apache Groovy 并与之集成,请查看本指南。

        1. REST
          1. 属性发布策略 - REST

仅返回通过联系 REST 终端节点明确允许的主体属性。端点必须设计为接受/处理 application/json,并且必须能够响应 GET 请求。预期的响应状态代码为 200,其中响应的正文包括 Map 链接到其值的属性。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

{

  "@class" : "org.apereo.cas.services.CasRegisteredService",

  "serviceId" : "sample",

  "name" : "sample",

  "id" : 100,

  "attributeReleasePolicy" : {

    "@class" : "org.apereo.cas.services.ReturnRestfulAttributeReleasePolicy",

    "endpoint" : "https://somewhere.example.org",

    "headers": {

      "@class": "java.util.LinkedHashMap",

      "header": "value"

    },

    "allowedAttributes" : {

      "@class" : "java.util.TreeMap",

      "cn" : "commonName"

    }

  }}

以下参数将传递给终端节点:

参数

描述

principal

表示已验证的主体的对象。

service

表示注册表中相应服务定义的对象。

提交的请求的正文还可能包括当前已解析属性的 Map。

allowedAttributes 字段是一个可选属性,它允许策略以虚拟方式重新映射属性。如果属性未定义或为空,则所有收到的属性都将被视为已授权按原样发布。如果定义了属性映射规则,则通过映射规则筛选收到的属性,并允许发布结果。

支持的映射规则和选项的范围与各种形式的 Return Mapped 策略所支持的规则和选项的范围相同。例如,上述配置将接受来自外部 REST 端点的 cn 属性,并实际上将该属性重命名为 commonName。

        1. 链接
          1. 链接属性发布策略

属性发布策略可以链接在一起以处理多个规则。策略调用的顺序与为服务本身定义的定义顺序相同。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

{

  "@class" : "org.apereo.cas.services.CasRegisteredService",

  "serviceId" : "sample",

  "name" : "sample",

  "id" : 300,

  "attributeReleasePolicy": {

    "@class": "org.apereo.cas.services.ChainingAttributeReleasePolicy",

    "mergingPolicy": "REPLACE",

    "policies": [ "java.util.ArrayList",

      [

          {"@class": "..."},

          {"@class": "..."}

      ]

    ]

  }}

支持以下合并策略:

政策

描述

replace

合并属性,以便源中的属性始终替换主体属性。

add

合并属性,以便生成源中主体尚不存在的属性。

multivalued

具有相同名称的属性将合并为多值属性。

          1. 策略执行顺序

请注意,可以为链中的每个策略分配一个数字顺序,该order将在执行之前确定其在链中的位置。如果您的属性发布策略应该在将值传递给链中的下一个策略之前首先动态计算值,则 thisorder 可能很重要。

例如,下面的策略链允许 CAS 首先使用 GeneratesFancyAttributeReleasePolicy 策略生成属性,该属性接下来将传递到链中的下一个策略,即 ReleaseFancyAttributeReleasePolicy,以决定是否应释放该属性。注意,策略order的配置决定了执行顺序。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

{

  "@class" : "org.apereo.cas.services.CasRegisteredService",

  "serviceId" : "sample",

  "name" : "sample",

  "id" : 300,

  "attributeReleasePolicy": {

    "@class": "org.apereo.cas.services.ChainingAttributeReleasePolicy",

    "policies": [ "java.util.ArrayList",

      [

          {

            "@class": "org.apereo.cas.ReleaseFancyAttributeReleasePolicy",

            "order": 1

          },

          {

            "@class": "org.apereo.cas.GeneratesFancyAttributeReleasePolicy",

            "order": 0

          }

      ]

    ]

  }}

          1. 重用属性

属性发布策略在链中分组和排序时,现在能够重用和构建在先前选择的属性之上,这些属性由同一链中的先前策略标记为发布。

例如,考虑以下链,其中第一个策略构建并授权 uid-X 的发布,第二个策略重用该属性来构建和授权 other-uid 的发布。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

{

  "@class" : "org.apereo.cas.services.CasRegisteredService",

  "serviceId" : "sample",

  "name" : "sample",

  "id" : 1,

  "attributeReleasePolicy": {

    "@class": "org.apereo.cas.services.ChainingAttributeReleasePolicy",

    "policies": [ "java.util.ArrayList",

      [

        {

            "@class" : "org.apereo.cas.services.ReturnMappedAttributeReleasePolicy",

            "order": 0,

            "allowedAttributes" : {

              "@class" : "java.util.TreeMap",

              "uid-X" : "groovy { return attributes['uid'].get(0) + '-X' }"

            }

        },

        {

          "@class" : "org.apereo.cas.services.ReturnMappedAttributeReleasePolicy",

          "order": 1,

          "allowedAttributes" : {

            "@class" : "java.util.TreeMap",

            "other-uid" : "groovy { return attributes['uid-X'].get(0) + '-other' }"

          }

        }

      ]

    ]

  }}

        1. 激活
          1. 属性发布策略 - 激活标准

几乎所有的属性发布策略都可以修改,以有条件地激活发布策略。这允许 release 策略动态地决定是否应将属性发布给目标应用程序。

您可以使用以下策略实施条件。

属性

Groovy

链接

可以根据可用的 principal 属性有条件地激活发布策略。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

{

  "@class" : "org.apereo.cas.services.CasRegisteredService",

  "serviceId" : "https://app.example.org",

  "name" : "Example",

  "attributeReleasePolicy" : {

    "@class" : "org.apereo.cas.services.ReturnAllowedAttributeReleasePolicy",

    "allowedAttributes" : [ "java.util.ArrayList", [ "cn", "mail", "sn" ] ],

    "activationCriteria": {

        "@class": "org.apereo.cas.services.AttributeBasedRegisteredServiceAttributeReleaseActivationCriteria",

        "operator": "AND",

        "reverseMatch": false,

        "requiredAttributes": {

          "@class" : "java.util.HashMap",

          "firstName": [ "java.util.ArrayList", [ "John", "Jon" ] ],

          "lastName": [ "java.util.ArrayList", [ "Holdoor", "Hodor" ] ]

        }

    }

  }}

在上面的示例中,仅当当前委托人具有值为 Jon 或 John 的 lastName 属性,并且具有值为 Holdoor 或 Hodor 的 firstName 属性时,才会激活属性发布策略。还可以将 operator 字段修改为使用 OR

principal 不得携带激活策略所需的任何属性。

      1. 值筛选器
        1. 属性值筛选器

虽然每个策略都定义了给定服务可以允许哪些主体属性,但可以为每个策略设置可选的属性筛选器,以根据属性的值进一步清除属性。

链接过滤器

正则表达式

映射的正则表达式

反向映射正则表达式

突变体映射正则表达式

Groovy

属性筛选器可以链接在一起,以便将多个筛选器与单个服务定义相关联。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

{

  "@class" : "org.apereo.cas.services.CasRegisteredService",

  "serviceId" : "sample",

  "name" : "sample",

  "id" : 200,

  "description" : "sample",

  "attributeReleasePolicy" : {

    "@class" : "org.apereo.cas.services.ReturnAllowedAttributeReleasePolicy",

    "attributeFilter" : {

      "@class" : "org.apereo.cas.services.support.RegisteredServiceChainingAttributeFilter",

      "filters": [ "java.util.ArrayList",

        [

            {

              "@class" : "org.apereo.cas.services.support.RegisteredServiceRegexAttributeFilter",

              "pattern" : "^\\w{3}$",

              "order": 10

            },

            {

              "@class" : "..."

            }

        ]

      ]

    },

    "allowedAttributes" : [ "java.util.ArrayList", [ "uid", "groupMembership" ] ]

  }}

在执行之前,首先根据其 order 属性对链接的属性筛选器进行排序。

      1. 属性同意
        1. 概述
          1. 属性同意

CAS 提供了在属性发布时强制执行用户知情同意的功能。实际上,这意味着在访问目标应用程序之前,用户将看到一组允许释放给应用程序的属性,其中包含继续或拒绝释放所述属性的选项。此外,还有一些其他选项用于指示同意引擎应如何考虑属性发布策略中的基础更改。用户还可以设置在属性发布策略中未检测到更改时发出提醒。

对存储在已配置存储库中的同意属性记录进行签名和加密。

通过在 WAR Overlay 中包含以下模块来启用支持:

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-consent-webflow"}

          1. 配置

CAS 配置目录中提供了以下设置和属性:

必填

自选

签名和加密

笔记

下面列出的配置设置在 CAS 配置元数据中标记为 Required。此标志表示可能需要该设置的存在才能激活或影响 CAS 功能的行为,并且通常应进行审查、可能拥有和调整。如果为该设置分配了默认值,则无需严格将该设置放在配置副本中,但仍应对其进行检查以确保它符合您的部署预期。

Show  entries

搜索:

·  cas.consent.core.crypto.encryption.key=

加密密钥是一个 JWT,其长度由加密密钥大小设置定义。

此设置支持 Spring 表达式语言。

 org.apereo.cas.configuration.model.core.util.EncryptionJwtCryptoProperties.

如何配置此属性?

·  cas.consent.core.crypto.signing.key=

签名密钥是一个 JWT,其长度由签名密钥大小设置定义。

此设置支持 Spring 表达式语言。

 org.apereo.cas.configuration.model.core.util.SigningJwtCryptoProperties.

如何配置此属性?

显示 1 到 2 的 2 个条目

上一页1下一页

          1. 执行器端点

CAS 提供以下端点:

  DELETE

/cas/actuator/attributeConsent/{principal}/{decisionId} 

使用决策 ID 删除委托人的同意决定。

  DELETE

/cas/actuator/attributeConsent/{principal} 

  GET

/cas/actuator/attributeConsent/{principal} 

  GET

/cas/actuator/attributeConsent 

  GET

/cas/actuator/attributeConsent/export 

  POST

/cas/actuator/attributeConsent/import 

          1. 帐户配置文件管理

属性同意功能能够向 CAS 中的账户配置文件管理功能提供同意决策记录和信息。有关更多详细信息,请参阅本指南。

          1. 属性选择

默认情况下,标记为 release 的所有属性都符合同意条件。要控制此过程,您可以定义一个同意策略,该策略指示执行同意属性选择所依据的标准。

分配给每个服务的策略包括以下功能:

描述

excludedAttributes

自选。从同意中排除指示的属性。

includeOnlyAttributes

自选。在同意中强制包含指示的属性,前提是属性已解析。

excludedServices

自选。服务标识符集,定义为正则表达式,应跳过同意。如果将服务定义视为许多其他应用程序的聚合,则特别有用,允许它充当内部过滤器。

status

控制是否应激活对此服务的同意。有关激活规则,请参阅下文。

示例定义如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

{

  "@class" : "org.apereo.cas.services.CasRegisteredService",

  "serviceId" : "sample",

  "name" : "sample",

  "id" : 100,

  "description" : "sample",

  "attributeReleasePolicy" : {

    "@class" : "org.apereo.cas.services.ReturnAllAttributeReleasePolicy",

    "consentPolicy": {

      "@class": "org.apereo.cas.services.consent.DefaultRegisteredServiceConsentPolicy",

      "excludedAttributes": ["java.util.LinkedHashSet", ["test"]],

      "includeOnlyAttributes": ["java.util.LinkedHashSet", ["test"]],

      "excludedServices": ["java.util.LinkedHashSet", ["https://example.*"]],

      "status": "FALSE"

    }

  }}

          1. 激活

有关更多详细信息,请参阅本指南。

          1. 存储

可以使用以下选项之一存储和记住用户同意决定。

存储

描述

DynamoDb

请参阅本指南

Groovy

请参阅本指南

JDBC

请参阅本指南

JSON 格式

请参阅本指南

LDAP 协议

请参阅本指南

MongoDb 数据库

请参阅本指南

Redis

请参阅本指南

REST

请参阅本指南

自定义

请参阅本指南

        1. 激活
          1. 激活 - 属性同意

属性同意激活可以在全局和每个服务级别进行控制。默认情况下,属性同意的全局激活规则处于打开状态,并且服务定义的同意策略规则处于禁用状态。服务定义的同意策略可以使用 status 字段覆盖全局规则,该字段接受以下值:

价值

描述

FALSE

同意策略已禁用,将覆盖全局配置。

TRUE

同意策略已启用,覆盖全局配置。

UNDEFINED

同意策略未定义,将决策委托给全局配置。

请注意,属性同意策略也可以链接在一起以组成多个策略。每个策略都可以单独禁用或启用,整个属性同意策略的总体聚合状态将用于确定属性同意的激活和选择。属性同意策略的示例链如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

{

  "@class" : "org.apereo.cas.services.CasRegisteredService",

  "serviceId" : "sample",

  "name" : "sample",

  "id" : 100,

  "description" : "sample",

  "attributeReleasePolicy": {

    "@class": "org.apereo.cas.services.ChainingAttributeReleasePolicy",

    "policies": [ "java.util.ArrayList",

      [

        {

          "@class" : "org.apereo.cas.services.ReturnAllowedAttributeReleasePolicy",

          "allowedAttributes" : [ "java.util.ArrayList", [ "cn", "mail", "sn" ] ],

          "consentPolicy": {

            "@class": "org.apereo.cas.services.consent.DefaultRegisteredServiceConsentPolicy",

            "includeOnlyAttributes": ["java.util.LinkedHashSet", ["cn"]],

            "status": "TRUE"

          }

        },

        {

          "@class" : "org.apereo.cas.services.ReturnAllowedAttributeReleasePolicy",

          "allowedAttributes" : [ "java.util.ArrayList", [ "displayName" ] ],

          "consentPolicy": {

            "@class": "org.apereo.cas.services.consent.DefaultRegisteredServiceConsentPolicy",

            "includeOnlyAttributes": ["java.util.LinkedHashSet", ["displayName"]],

            "status": "FALSE"

          }

        }

      ]

    ]

  }}

          1. 通过 Groovy 激活

可以将默认同意激活策略替换为外部 Groovy 脚本,以确定请求是否符合同意条件。脚本的路径是通过 CAS 配置属性定义的。

CAS 配置目录中提供了以下设置和属性:

必填

Groovy 脚本

笔记

下面列出的配置设置在 CAS 配置元数据中标记为 Required。此标志表示可能需要该设置的存在才能激活或影响 CAS 功能的行为,并且通常应进行审查、可能拥有和调整。如果为该设置分配了默认值,则无需严格将该设置放在配置副本中,但仍应对其进行检查以确保它符合您的部署预期。

Show  entries

搜索:

·  cas.consent.activation-strategy-groovy-script.location=

在 CAS 能够自动监视底层资源的更改并动态检测更新和修改的情况和场景中,您可以将以下设置指定为环境变量或系统属性,其值为 false,以禁用资源观察程序:org.apereo.cas.util.io.PathWatcherService。

 org.apereo.cas.configuration.model.SpringResourceProperties.

如何配置此属性?

显示 1 到 1 的 1 个条目

上一页1下一页

脚本本身可以设计成这样:

1

2

3

4

5

6

7

import org.apereo.cas.util.model.TriStateBoolean

def run(Object[] args) {

    def (consentEngine,casProperties,service,registeredService,authentication,request,logger) = args

    logger.debug("Activating consent for ${registeredService.name}")

    return true;}

以下参数将传递给脚本:

参数

描述

consentEngine

对 ConsentEngine 对象的引用。

casProperties

对从属性源加载的 CAS 配置属性的引用。

service

表示请求应用程序的 Service 对象。

registeredService

表示注册表中的服务定义的 RegisteredService 对象。

authentication

表示主动身份验证事务的 Authentication 对象。

request

表示 HTTP servlet 请求的对象。

logger

负责发出日志消息的对象,例如 logger.info(...)

该脚本应返回 true 或 false 以确定是否需要同意。

要准备 CAS 以支持 Apache Groovy 并与之集成,请查看本指南。

        1. 存储
          1. 自定义

自定义 - 属性同意存储

您还可以将自己的属性同意管理实现注入 CAS 中,该 CAS 本身将处理存储同意决策等。为此,您需要设计一个大致符合以下内容的配置类:

1

2

3

4

5

6

7

8

9

10

11

package org.apereo.cas.consent;

@AutoConfiguration@EnableConfigurationProperties(CasConfigurationProperties.class)public class MyConfiguration {

    @Bean

    public ConsentRepository consentRepository() {

        ...

    }}

请参阅本指南,了解有关如何将配置注册到 CAS 运行时的更多信息。

          1. Groovy
            1. Groovy - 属性同意存储

同意操作可以通过 Groovy 脚本进行处理,该脚本的路径通过设置教给 CAS。

该脚本可以设计为:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

import java.util.*import org.apereo.cas.consent.*

def read(Object[] args) {

    def (currentConsentDecisions,logger) = args

    currentConsentDecisions}

def write(Object[] args) {

    def (consentDecision,logger) = args

    true}

def delete(Object[] args) {

    def (decisionId,principalId,logger) = args

    !principalId.contains("-")}

def deletePrincipal(Object[] args) {

    def (principalId,logger) = args

    !principalId.contains("-")}

            1. 配置

CAS 配置目录中提供了以下设置和属性:

必填

Groovy 脚本

笔记

下面列出的配置设置在 CAS 配置元数据中标记为 Required。此标志表示可能需要该设置的存在才能激活或影响 CAS 功能的行为,并且通常应进行审查、可能拥有和调整。如果为该设置分配了默认值,则无需严格将该设置放在配置副本中,但仍应对其进行检查以确保它符合您的部署预期。

Show  entries

搜索:

·  cas.consent.groovy.location=

在 CAS 能够自动监视底层资源的更改并动态检测更新和修改的情况和场景中,您可以将以下设置指定为环境变量或系统属性,其值为 false,以禁用资源观察程序:org.apereo.cas.util.io.PathWatcherService。

 org.apereo.cas.configuration.model.support.consent.GroovyConsentProperties.

如何配置此属性?

显示 1 到 1 的 1 个条目

上一页1下一页

要准备 CAS 以支持 Apache Groovy 并与之集成,请查看本指南。

          1. JDBC
            1. JDBC - 属性同意存储

通过在 WAR Overlay 中包含以下模块来启用支持:

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-consent-jdbc"}

            1. 配置

CAS 配置目录中提供了以下设置和属性:

必填

自选

Hibernate 和 JDBC

笔记

下面列出的配置设置在 CAS 配置元数据中标记为 Required。此标志表示可能需要该设置的存在才能激活或影响 CAS 功能的行为,并且通常应进行审查、可能拥有和调整。如果为该设置分配了默认值,则无需严格将该设置放在配置副本中,但仍应对其进行检查以确保它符合您的部署预期。

Show  entries

搜索:

·  cas.consent.jpa.driver-class=org.hsqldb.jdbcDriver

用于连接到数据库的 JDBC 驱动程序。

 org.apereo.cas.configuration.model.support.consent.JpaConsentProperties.

如何配置此属性?

·  cas.consent.jpa.password=

数据库连接密码。

 org.apereo.cas.configuration.model.support.consent.JpaConsentProperties.

如何配置此属性?

·  cas.consent.jpa.url=jdbc:hsqldb:mem:cas-hsql-database

数据库连接 URL。

此设置支持 Spring 表达式语言。

 org.apereo.cas.configuration.model.support.consent.JpaConsentProperties.

如何配置此属性?

·  cas.consent.jpa.user=sa

数据库用户必须具有足够的权限,才能在需要时处理架构更改和更新。

 org.apereo.cas.configuration.model.support.consent.JpaConsentProperties.

如何配置此属性?

显示 1 到 4 的 4 个条目

上一页1下一页

          1. JSON 格式
            1. JSON - 属性同意存储

这是默认选项,对于演示和测试目的最有用。同意决策都保存在静态 JSON 资源中,该资源的路径通过设置教给 CAS。

示例记录如下:

1

2

3

4

5

6

7

8

9

10

{

   "id": 1000,

   "principal": "casuser",

   "service": "https://google.com",

   "createdDate": [ 2017, 7, 10, 14, 10, 17 ],

   "options": "ATTRIBUTE_NAME",

   "reminder": 14,

   "reminderTimeUnit": "DAYS",

   "attributes": "..."}

以下字段可用:

描述

id

现有记录的有效数值。

principal

已验证的用户 ID。

service

Target 应用程序 URL,其属性将发布到其。

createdDate

决策记录的日期/时间。

options

指示如何确定此应用程序的属性更改。(即 ATTRIBUTE_NAME、ATTRIBUTE_VALUE、ALWAYS

reminder

指示在未找到更改的情况下,将提醒用户再次同意的时间段。

reminderTimeUnit

提醒时间单位(即 MONTHSDAYSHOURS 等)。

attributes

此应用程序的属性名称的 Base64,已签名和加密。

options 的有效值包括:

描述

ATTRIBUTE_NAME

如果任何属性名称发生更改,例如,在发布捆绑包中添加或删除属性时,请征求同意。如果更改了现有属性的值,则会忽略同意。

ATTRIBUTE_VALUE

与上述相同,不同之处在于 attributes 值也会被考虑在内,并在更改时触发同意。

ALWAYS

始终征求同意,无论更改或上下文如何。

            1. 配置

CAS 配置目录中提供了以下设置和属性:

必填

笔记

下面列出的配置设置在 CAS 配置元数据中标记为 Required。此标志表示可能需要该设置的存在才能激活或影响 CAS 功能的行为,并且通常应进行审查、可能拥有和调整。如果为该设置分配了默认值,则无需严格将该设置放在配置副本中,但仍应对其进行检查以确保它符合您的部署预期。

Show  entries

搜索:

·  cas.consent.json.location=

在 CAS 能够自动监视底层资源的更改并动态检测更新和修改的情况和场景中,您可以将以下设置指定为环境变量或系统属性,其值为 false,以禁用资源观察程序:org.apereo.cas.util.io.PathWatcherService。

 org.apereo.cas.configuration.model.support.consent.JsonConsentProperties.

如何配置此属性?

显示 1 到 1 的 1 个条目

上一页1下一页

          1. LDAP 协议
            1. LDAP - 属性同意存储

同意决策可以存储在 LDAP 用户对象上。决策被序列化为 JSON 并逐个存储在多值字符串属性中。

通过在 WAR Overlay 中包含以下模块来启用支持:

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-consent-ldap"}

            1. 配置

CAS 配置目录中提供了以下设置和属性:

必填

自选

LDAP & Active Directory

笔记

下面列出的配置设置在 CAS 配置元数据中标记为 Required。此标志表示可能需要该设置的存在才能激活或影响 CAS 功能的行为,并且通常应进行审查、可能拥有和调整。如果为该设置分配了默认值,则无需严格将该设置放在配置副本中,但仍应对其进行检查以确保它符合您的部署预期。

Show  entries

搜索:

·  cas.consent.ldap.base-dn=

要使用的基本 DN。在某些情况下,单个 LDAP 树的不同部分可能被视为 base-dns。可以使用特殊的分隔符指定每个条目并将其连接在一起,而不是为每个单独的 base-dn 复制 LDAP 配置块。用户 DN 按定义的顺序使用所有 base-dn 和 DN 解析程序的组合进行检索。如果找到多个 DN,则 DN 解析应失败。否则,将返回找到的第一个 DN。通常的语法是:subtreeA,dc=example,dc=net|subtreeC,dc=example,dc=net。

 org.apereo.cas.configuration.model.support.consent.LdapConsentProperties.

如何配置此属性?

·  cas.consent.ldap.bind-credential=

连接到 LDAP 时要使用的绑定凭证。

 org.apereo.cas.configuration.model.support.consent.LdapConsentProperties.

如何配置此属性?

·  cas.consent.ldap.bind-dn=

连接到 LDAP 时要使用的绑定 DN。注入 LDAP 连接池的 LDAP 连接配置可以使用以下参数进行初始化:

bindDn/bindCredential provided - 在初始化连接时使用提供的凭证进行绑定。

bindDn/bindCredential 设置为 * - 使用快速绑定策略初始化池。

bindDn/bindCredential 设置为空白 - 跳过连接初始化;匿名执行操作。

提供的 SASL 机制 - 初始化连接时使用给定的 SASL 机制进行绑定。

 org.apereo.cas.configuration.model.support.consent.LdapConsentProperties.

如何配置此属性?

·  cas.consent.ldap.consent-attribute-name=casConsentDecision

将同意决策保存为 JSON 的 LDAP 属性的名称。

 org.apereo.cas.configuration.model.support.consent.LdapConsentProperties.

如何配置此属性?

·  cas.consent.ldap.ldap-url=

服务器的 LDAP URL。可以指定多个,用空格和/或逗号分隔。

 org.apereo.cas.configuration.model.support.consent.LdapConsentProperties.

如何配置此属性?

显示 1 到 5 的 7 个条目

上一页12下一页

          1. MongoDb 数据库
            1. MongoDb - 属性同意存储

通过在 WAR Overlay 中包含以下模块来启用支持:

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-consent-mongo"}

            1. 配置

CAS 配置目录中提供了以下设置和属性:

必填

自选

笔记

下面列出的配置设置在 CAS 配置元数据中标记为 Required。此标志表示可能需要该设置的存在才能激活或影响 CAS 功能的行为,并且通常应进行审查、可能拥有和调整。如果为该设置分配了默认值,则无需严格将该设置放在配置副本中,但仍应对其进行检查以确保它符合您的部署预期。

Show  entries

搜索:

·  cas.consent.mongo.client-uri=

mongodb 实例的连接 URI。这通常采用 mongodb://user:psw@ds135522.somewhere.com:35522/db 的形式。如果未指定,将回退到其他单个设置。如果指定,则接管所有其他设置(如果适用)。

 org.apereo.cas.configuration.model.support.consent.MongoDbConsentProperties.

如何配置此属性?

·  cas.consent.mongo.collection=

要获取和/或创建的 MongoDb 数据库集合名称。

 org.apereo.cas.configuration.model.support.consent.MongoDbConsentProperties.

如何配置此属性?

·  cas.consent.mongo.database-name=

MongoDb 数据库实例名称。

 org.apereo.cas.configuration.model.support.consent.MongoDbConsentProperties.

如何配置此属性?

·  cas.consent.mongo.host=localhost

用于身份验证的 MongoDb 数据库主机。可以定义多个主机地址,用逗号分隔。如果定义了多个主机,则假定每个主机也包含端口(如果有)。否则,配置可能会回退到定义的端口。

 org.apereo.cas.configuration.model.support.consent.MongoDbConsentProperties.

如何配置此属性?

·  cas.consent.mongo.password=

用于身份验证的 MongoDb 数据库密码。

 org.apereo.cas.configuration.model.support.consent.MongoDbConsentProperties.

如何配置此属性?

显示 1 到 5 的 7 个条目

上一页12下一页

          1. DynamoDb

DynamoDb - 属性同意存储

通过在 WAR Overlay 中包含以下模块来启用支持:

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-consent-dynamodb"}

配置

CAS 配置目录中提供了以下设置和属性:

必填

自选

笔记

下面列出的配置设置在 CAS 配置元数据中标记为 Required。此标志表示可能需要该设置的存在才能激活或影响 CAS 功能的行为,并且通常应进行审查、可能拥有和调整。如果为该设置分配了默认值,则无需严格将该设置放在配置副本中,但仍应对其进行检查以确保它符合您的部署预期。

Show  entries

搜索:

·  cas.consent.dynamo-db.credential-access-key=

使用 AWS 提供的访问密钥进行身份验证。

此设置支持 Spring 表达式语言。

 org.apereo.cas.configuration.model.support.consent.DynamoDbConsentProperties.

如何配置此属性?

·  cas.consent.dynamo-db.credential-secret-key=

使用 AWS 提供的密钥进行身份验证。

此设置支持 Spring 表达式语言。

 org.apereo.cas.configuration.model.support.consent.DynamoDbConsentProperties.

如何配置此属性?

·  cas.consent.dynamo-db.dax.url=

Cluster url 的 URL 中。例如,dax://my-cluster.l6fzcv.dax-clusters.us-east-1.amazonaws.com。

 org.apereo.cas.configuration.model.support.dynamodb.DynamoDbDaxProperties.

如何配置此属性?

·  cas.consent.dynamo-db.endpoint=

AWS 自定义终端节点。

 org.apereo.cas.configuration.model.support.consent.DynamoDbConsentProperties.

如何配置此属性?

·  cas.consent.dynamo-db.region=

使用的 AWS 区域。

 org.apereo.cas.configuration.model.support.consent.DynamoDbConsentProperties.

如何配置此属性?

显示 1 到 5 个条目中的 5 个

上一页1下一页

          1. Redis
            1. Redis - 属性同意存储

通过在 WAR Overlay 中包含以下模块来启用支持:

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-consent-redis"}

            1. 配置

CAS 配置目录中提供了以下设置和属性:

必填

自选

笔记

下面列出的配置设置在 CAS 配置元数据中标记为 Required。此标志表示可能需要该设置的存在才能激活或影响 CAS 功能的行为,并且通常应进行审查、可能拥有和调整。如果为该设置分配了默认值,则无需严格将该设置放在配置副本中,但仍应对其进行检查以确保它符合您的部署预期。

Show  entries

搜索:

·  cas.consent.redis.cluster.nodes[0].host=

服务器的主机地址。

 org.apereo.cas.configuration.model.support.redis.RedisClusterNodeProperties.

如何配置此属性?

·  cas.consent.redis.cluster.nodes[0].port=

服务器的端口号。

 org.apereo.cas.configuration.model.support.redis.RedisClusterNodeProperties.

如何配置此属性?

·  cas.consent.redis.cluster.nodes[0].replica-of=

设置 master 节点的 id。

 org.apereo.cas.configuration.model.support.redis.RedisClusterNodeProperties.

如何配置此属性?

·  cas.consent.redis.cluster.nodes[0].type=

指示此节点的类型/角色。接受的值为 MASTER, REPLICA 。

 org.apereo.cas.configuration.model.support.redis.RedisClusterNodeProperties.

如何配置此属性?

·  cas.consent.redis.cluster.password=

集群连接的密码。

 org.apereo.cas.configuration.model.support.redis.RedisClusterProperties.

如何配置此属性?

显示 1 到 5 个条目,共 14 个条目

上一页123下一页

          1. REST
            1. REST - 属性同意存储

通过在 WAR Overlay 中包含以下模块来启用支持:

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-consent-rest"}

端点必须设计为接受/处理 application/json。

操作

方法

数据

预期响应

找到同意决定

GET

service、principal 作为标头。

200. body 中的同意决定对象。

查找用户的同意决定

GET

principal 作为标头。

200. 同意决定在正文中成为对象。

找到所有同意决定

GET

不适用

200. 同意决定在正文中成为对象。

商店用户意见征求决定

POST

body 中的 Consent decision 对象。

删除同意决定

DELETE

/<decisionId> 附加到 URL。principal 作为标头

删除同意决定

DELETE

principal 作为标头。

传输中的同意决策对象将并且必须与上述 JSON 结构匹配。

            1. 配置

CAS 配置目录中提供了以下设置和属性:

必填

自选

笔记

下面列出的配置设置在 CAS 配置元数据中标记为 Required。此标志表示可能需要该设置的存在才能激活或影响 CAS 功能的行为,并且通常应进行审查、可能拥有和调整。如果为该设置分配了默认值,则无需严格将该设置放在配置副本中,但仍应对其进行检查以确保它符合您的部署预期。

Show  entries

搜索:

·  cas.consent.rest.url=

用于联系和检索属性的终端节点 URL。

此设置支持 Spring 表达式语言。

 org.apereo.cas.configuration.model.support.consent.RestfulConsentProperties.

如何配置此属性?

显示 1 到 1 的 1 个条目

上一页1下一页

      1. 缓存
        1. 属性发布缓存

默认情况下,解析的属性将缓存到 SSO 会话的长度。如果自 SSO 会话开始以来有任何属性值更改,则这些更改不会反映出来,并在发布时返回到服务。

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下一页

        1. 主体属性存储库

以下设置由所有主体属性存储库共享:

名字

价值

mergingStrategy

在组合来自多个源的属性时指示合并策略。接受的值为 MULTIVALUED、ADD、NONE、MULTIVALUED

attributeRepositoryIds

Set存储库标识符,用于在发布时进行属性解析。

ignoreResolvedAttributes

忽略可能在主体解析阶段(通常通过属性存储库)解析的属性集合。

CAS 提供了以下缓存策略:

Default

缓存

CAS Principal 与基础 attributerepository 源之间的默认关系,这样 Principal 属性将保持原样,而无需任何其他过程来评估和更新它们。这不需要显式配置。

          1. 合并策略

默认情况下,不执行合并策略,这意味着始终忽略主体属性,并且始终返回来自源的属性。但以下任何合并策略都可能是合适的选项:

合并

取代

具有相同名称的属性将合并到多值列表中。

例如:

主体具有属性 {email=eric.dalquist@example.com, phone=123-456-7890}源具有属性 {phone=[111-222-3333, 000-999-8888], office=3233}生成的合并将具有属性:{email=eric.dalquist@example.com, phone=[123-456-7890, 111-222-3333, 000-999-8888], office=3233}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

{

  "@class" : "org.apereo.cas.services.CasRegisteredService",

  "serviceId" : "sample",

  "name" : "sample",

  "id" : 100,

  "attributeReleasePolicy" : {

    "@class" : "org.apereo.cas.services.ReturnAllowedAttributeReleasePolicy",

    "principalAttributesRepository" : {

      "@class" : "org.apereo.cas.authentication.principal.cache.CachingPrincipalAttributesRepository",

      "timeUnit" : "HOURS",

      "expiration" : 2,

      "mergingStrategy" : "MULTIVALUED"

    }

  }}

      1. 存储库筛选
        1. 属性存储库筛选

主体属性存储库可以查阅由 Person Directory 定义和控制的属性源。假设 JSON 属性存储库源是使用标识符 MyJsonRepository 定义的,则以下定义将忽略所有以前解析的属性,并再次联系 MyJsonRepository以获取属性并将其缓存 30 分钟。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

{

  "@class" : "org.apereo.cas.services.CasRegisteredService",

  "serviceId" : "^(https|imaps)://.*",

  "name" : "HTTPS and IMAPS",

  "id" : 1,

  "attributeReleasePolicy" : {

    "@class" : "org.apereo.cas.services.ReturnAllAttributeReleasePolicy",

    "principalAttributesRepository" : {

        "@class" : "org.apereo.cas.authentication.principal.cache.CachingPrincipalAttributesRepository",

        "timeUnit" : "MINUTES",

        "expiration" : 30,

        "ignoreResolvedAttributes": true,

        "attributeRepositoryIds": ["java.util.HashSet", [ "MyJsonRepository" ]],

        "mergingStrategy" : "MULTIVALUED"

    }

  }}

下面是一个类似的示例,其中关闭了服务的缓存,其中 CAS 尝试将以前解析的属性与标识为 MyJsonRepository 的 attributerepository 中的结果组合在一起。预期是,在身份验证阶段,属性源 MyJsonRepository 被排除在主体解析之外,并且只应在发布时为此服务联系:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

{

  "@class" : "org.apereo.cas.services.CasRegisteredService",

  "serviceId" : "^(https|imaps)://.*",

  "name" : "HTTPS and IMAPS",

  "id" : 1,

  "attributeReleasePolicy" : {

    "@class" : "org.apereo.cas.services.ReturnAllAttributeReleasePolicy",

    "principalAttributesRepository" : {

        "@class" : "org.apereo.cas.authentication.principal.DefaultPrincipalAttributesRepository",

        "ignoreResolvedAttributes": false,

        "attributeRepositoryIds": ["java.util.HashSet", [ "MyJsonRepository" ]],

        "mergingStrategy" : "MULTIVALUED"

    }

  }}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2299310.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【电路笔记】-双向计数器

双向计数器 文章目录 双向计数器1、概述2、双向计数器双向计数器能够通过任何给定的计数序列向上或向下方向计数。 1、概述 双向计数器是同步向上/向下二进制计数器,能够在两个方向上向或从某个预设值以及零进行计数。 除了从零开始“向上”计数并增加或递增到某个预设值之外…

Python PyCharm DeepSeek接入

Python PyCharm DeepSeek接入 创建API key 首先进入DeepSeek官网&#xff0c;https://www.deepseek.com/ 点击左侧“API Keys”&#xff0c;创建API key&#xff0c;输出名称为“AI” 点击“创建"&#xff0c;将API key保存&#xff0c;复制在其它地方。 在PyCharm中下…

从ARM官方获取自己想要的gcc交叉编译工具链接(Arm GNU Toolchain),并在Ubuntu系统中进行配置

前言 本文是博文 https://blog.csdn.net/wenhao_ir/article/details/145547974 的分支博文。 在本博文中我们完成gcc交叉编译工具gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz的下载、配置、测试。 下载自己想要的gcc交叉编译工具的源码 目标文件的名字及说…

【系统架构设计师】虚拟机体系结构风格

目录 1. 说明2. 解释器体系结构风格3. 规则系统体系结构风格4. 例题4.1 例题1 1. 说明 1.p263。2.虚拟机体系结构风格的基本思想是人为构建一个运行环境&#xff0c;在这个环境之上&#xff0c;可以解析与运行自定义的一些语言&#xff0c;这样来增加架构的灵活性。3.虚拟机体…

Python 字典思维导图

在本章中&#xff0c;你将学习能够将相关信息关联起来的Python字典。你将学习如何访问和修改字典中的信息。鉴于字典可存储的信息量几乎不受限制&#xff0c;因此我们会演示如何遍 历字典中的数据。另外&#xff0c;你还将学习存储字典的列表、存储列表的字典和存储字典的字典。…

前台、后台、守护进程对比,进程组的相关函数

前台进程&#xff0c;后台进程&#xff0c;守护进程的对比 在前面我们已经了解了前台进程&#xff0c;后台进程&#xff0c;守护进程。 直接在终端中输入命令&#xff1a; 这是最常见的启动前台进程的方式。例如&#xff0c;在终端中输入 ./myprogram 就可以启动 myprogram 程…

openAI最新o1模型 推理能力上表现出色 准确性方面提升 API如何接入?

OpenAI o1模型在回答问题前会进行深入思考&#xff0c;并生成一条内部推理链&#xff0c;使其在尝试解决问题时可以识别并纠正错误&#xff0c;将复杂的步骤分解为更简单的部分&#xff0c;并在当前方法无效时尝试不同的途径。据悉&#xff0c;o1不仅数学水平与美国奥林匹克竞赛…

跨平台键鼠共享免费方案--Deskflow!流畅体验用MacBook高效控制Windows设备

在混合办公场景中&#xff0c;多设备协同已成为提升效率的关键需求。对于同时使用Mac与Windows设备的用户&#xff0c;如何通过一套键盘和触控板实现无缝切换&#xff0c;避免桌面空间浪费与操作冗余&#xff1f;本文将基于开源工具Deskflow&#xff0c;提供一套专业级解决方案…

CAS单点登录(第7版)27.开发人员

如有疑问&#xff0c;请看视频&#xff1a;CAS单点登录&#xff08;第7版&#xff09; 开发人员 Javadocs文档 group org.apereo.cas has published 42 artifact(s) with total 8210 version(s) org.apereo.cas org apereo.cas 小组已出版 42 件作品&#xff0c;共 8210 个版…

算法与数据结构(多数元素)

题目 思路 方法一&#xff1a;哈希表 因为要求出现次数最多的元素&#xff0c;所以我们可以使用哈希映射存储每个元素及其出现的次数。每次记录出现的次数若比最大次数大&#xff0c;则替换。 方法二&#xff1a;摩尔算法 摩尔的核心算法就是对抗&#xff0c;因为存在次数多…

【2.10-2.16学习周报】

文章目录 摘要Abstract一、理论方法介绍1.模糊类增量学习2.Rainbow Memory(RM)2.1多样性感知内存更新2.2通过数据增强增强样本多样性(DA) 二、实验1.实验概况2.RM核心代码3.实验结果 总结 摘要 本博客概述了文章《Rainbow Memory: Continual Learning with a Memory of Divers…

python包的管理

管理python包 python能跻身最欢迎编程语言前列的一个主要原因是python有着活跃的社区提供丰富的包&#xff0c;诸如numpy&#xff0c;pandas&#xff0c;scikit-learn等等。 python的包都存放PyPI中&#xff0c;PyPI即Python Package Index&#xff0c;是python的软件仓库。所…

我用 Cursor 开发了一款个人小记系统

https://note.iiter.cn 项目背景 在日常工作和学习中,我们经常需要快速记录一些想法、收藏一些有用的链接或者保存一些重要的文本、图片内容。虽然市面上已经有很多笔记软件,但我想要一个更轻量、更简单的工具,专注于快速记录和智能检索。于是我开发了这款个人小记系统。 系统…

安全测试中的身份认证与访问控制深度解析

第一部分:基本概念与核心问题 1. 身份认证与访问控制基础 1.1 身份认证三要素 知识因素(密码、PIN码)持有因素(硬件令牌、手机)生物因素(指纹、面部识别)1.2 访问控制模型 DAC(自主访问控制)MAC(强制访问控制)RBAC(基于角色的访问控制)2. 关键安全机制 2.1 会话…

代码随想录-训练营-day30

今天我们要进入动态规划的背包问题&#xff0c;背包问题也是一类经典问题了。总的来说可以分为&#xff1a; 今天让我们先来复习0-1背包的题目&#xff0c;这也是所有背包问题的基础。所谓的0-1背包问题一般来说就是给一个背包带有最大容量&#xff0c;然后给一个物体对应的需要…

全平台搭载旭日5!科沃斯GOAT智能割草机器人全新系列正式开售

要闻 近日&#xff0c;科沃斯全新发布的GOAT A Series 和 GOAT O Series割草机器人&#xff0c;将在多国市场正式上市发售。作为业界最强的割草机器人产品之一&#xff0c;GOAT致力为割草机带来基于机器人视觉的专业定位解决方案。科沃斯GOAT全新系列产品全平台搭载地瓜机器人…

自定义组件数据监听器案例,纯数据字段,自定义组件生命周期,页面的生命周期,插槽

1.自定义组件数据监听器案例 1.1基础案例模板 1.2定义button事件的处理函数 1.3监听对象中属性的变化&#xff0c;并且为fullColor赋值 使用通配符监听所有属性变化 2.自定义组件的纯数据字段 、 3.自定义组件的生命周期 4.组件所在页面的生命周期 5.自定义组件插槽 5.1单个插…

mybatis-lombok工具包介绍

Lombok是一个实用的]ava类库&#xff0c;能通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法&#xff0c;并可以自动化生成日志变量&#xff0c;简化java开发、提高效率。 使用前要加入Lombok依赖

LDO技术:线性调整率与负载调整率全解析

LDO(Low Dropout Regulator)低压差线性稳压器&#xff0c;其结构比较简单、纹波和噪声比DCDC小、成本也优于DCDC&#xff0c;缺点是在输入电压和输出电压的压差比较大时&#xff0c;效率低些&#xff0c;但在小电流电源电路上被广泛使用。现在输入电压和输出电压的压差可做到10…

SpringBoot 集成 Caffeine 实现本地缓存

目录 1、Caffeine 简介 1.1、Caffeine 简介1.2、对比 Guava cache 的性能主要优化项1.3、常见的缓存淘汰算法1.4、SpringBoot 集成 Caffeine 两种方式 2、SpringBoot 集成 Caffeine 方式一 2.1、缓存加载策略 2.1.1、手动加载2.1.2、自动加载【Loading Cache】2.1.3、异步加载…