当前位置: 首页 > wzjs >正文

济南建设厅网站安全员ide wordpress

济南建设厅网站安全员,ide wordpress,python培训视频,用数据库做网站如有疑问,请看视频:CAS单点登录(第7版) 服务与应用 概述 服务管理 CAS 服务管理工具允许 CAS 服务器管理员声明和配置哪些服务(CAS 客户端)可以以何种方式使用 CAS。服务管理工具的核心组件是服务注册表…

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

  1. 服务与应用
    1. 概述
      1. 服务管理

CAS 服务管理工具允许 CAS 服务器管理员声明和配置哪些服务(CAS 客户端)可以以何种方式使用 CAS。服务管理工具的核心组件是服务注册表,它存储一个或多个已注册的服务,其中包含驱动许多 CAS 行为的元数据。

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

自选

笔记

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

Show  entries

搜索:

·  cas.service-registry.core.index-services=true

当设置为 true 时,CAS 会为已注册服务的特定预选字段创建内存中索引,从而允许它按其友好名称、客户端 ID 等查找服务定义。这对于 OAuth 或 OpenID Connect 中的查询操作特别有用,因为无需遍历所有服务定义来查找匹配的客户端 ID。索引允许 CAS 对加载的服务对象执行直接查询,以查找相关定义。

 org.apereo.cas.configuration.model.core.services.ServiceRegistryCoreProperties.

如何配置此属性?

·  cas.service-registry.core.init-default-services=true

指示是否应将默认随 CAS 附带的服务定义包含在初始化过程中并导入到 CAS 服务注册表中的标志。CAS 附带的默认服务文件位于 JsonServiceRegistryProperties#DEFAULT_LOCATION_DIRECTORY 目录内的 Classpath 中。

 org.apereo.cas.configuration.model.core.services.ServiceRegistryCoreProperties.

如何配置此属性?

·  cas.service-registry.core.init-from-json=false

您还可以通过 #isInitDefaultServices() 控制是否应包含和初始化 default 服务。

 org.apereo.cas.configuration.model.core.services.ServiceRegistryCoreProperties.

如何配置此属性?

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

上一页1下一页

      1. 执行器端点

CAS 提供以下端点:

  DELETE

/cas/actuator/registeredServices/{id} 

按 ID 删除已注册的服务。

  GET

/cas/actuator/registeredServices/{id} 

  GET

/cas/actuator/registeredServices/type/{type} 

  GET

/cas/actuator/registeredServices 

  GET

/cas/actuator/registeredServices/export/{id} 

  GET

/cas/actuator/registeredServices/export 

  POST

/cas/actuator/registeredServices/import 

  POST

/cas/actuator/registeredServices 

  PUT

/cas/actuator/registeredServices 

  POST

/cas/actuator/serviceAccess 

      1. 注册服务

已注册的服务会显示以下元数据:

字段

描述

id

必需的唯一标识符。此值必须是有效的数值。

name

必需名称(255 个字符或更少)。

description

服务的可选自由文本描述。(255 个字符)

informationUrl

指向服务信息指南的可选自由文本链接。

privacyUrl

指向服务隐私政策的可选自由文本链接。

redirectUrl

将身份验证响应返回给应用程序时使用的可选 URL。

logo

作为此服务的徽标的图像文件的可选路径。该图像将与服务描述和名称一起显示在登录页面上。该值可以是 CAS Web 应用程序 images 目录的相对路径,也可以是完整的 URL。

serviceId

描述逻辑服务的必需正则表达式。逻辑服务定义一个或多个服务所在的一个或多个 URL。url 模式的定义必须仔细完成,因为它可能会打开安全漏洞。

locale

可选的区域设置名称,可用于在服务请求票证时自定义 CAS UI。值可以使用 Spring 表达式语言语法。有关更多详细信息,请参阅本指南

theme

可选主题名称,可用于在服务请求票证时自定义 CAS UI。值可以使用 Spring 表达式语言语法。有关更多详细信息,请参阅本指南

proxyPolicy

确定服务是否能够代理身份验证。有关更多信息,请参阅本指南

evaluationOrder

确定已注册服务的评估的相对顺序。当两个服务 URL 表达式涵盖相同的服务时,此标志尤其重要;评估顺序 确定首先评估哪个注册,并充当内部排序因子。

authenticationPolicy

用作全局身份验证引擎的补充或覆盖的身份验证策略。有关更多详细信息,请参阅本指南

attributeReleasePolicy

描述属性集的策略允许发布到应用程序,以及清除一些属性所需的任何其他过滤逻辑。有关属性发布和过滤器的更多详细信息,请参阅本指南

logoutType

定义在启动注销协议后应如何处理此服务。可接受的值为 LogoutType.BACK_CHANNEL、LogoutType.FRONT_CHANNEL 或 LogoutType.NONE。有关注销的更多详细信息,请参阅本指南

responseType

定义 CAS 应如何响应对此服务的请求。有关更多详细信息,请参阅本指南

usernameAttributeProvider

提供程序配置,它指示应将 “username” 的值发送回应用程序。有关属性发布和过滤器的更多详细信息,请参阅本指南

accessStrategy

概述和访问此服务的规则的策略配置。它描述了是否允许服务、是否授权参与 SSO,或者是否可以根据特定属性定义的角色(即 RBAC)从 CAS 角度授予访问权限。有关属性发布和过滤器的更多详细信息,请参阅本指南

publicKey

与此服务关联的公钥,用于通过加密 CAS 验证协议响应中的某些元素和属性(如 PGT 或凭证)来授权请求。有关属性发布和过滤器的更多详细信息,请参阅本指南

logoutUrl

此服务接收注销请求的 URL 端点。有关更多详细信息,请参阅本指南

properties

以键/值对的形式与此服务关联的额外元数据。这用于将自定义字段注入服务定义中,以便扩展模块稍后使用该字段来定义每个服务的其他行为。有关更多信息,请参阅本指南

multifactorPolicy

描述此服务身份验证 (通常用于多因素身份验证) 所需配置的策略。

contacts

指定与拥有应用程序的服务关联的联系人集合。有关更多信息,请参阅本指南

matchingStrategy

指定用于将服务定义与身份验证请求匹配的策略。有关更多信息,请参阅本指南

supportedProtocols

指定此服务支持和允许的协议。有关更多信息,请参阅本指南

templateName

在构建此服务定义时,要用作蓝图的模板服务定义的名称。

 服务类型

请注意,虽然上述属性适用于所有通用服务定义,但 CAS 中还有其他服务类型可能被激活和需要,具体取决于所使用的协议和客户端应用程序的性质。请务必查看您心目中的功能的专用指南(即 OAuth、SAML 等)。

      1. 存储

以下选项可用于在 CAS 中存储服务。

存储

描述

用法

Memory

请参阅本指南

将存储在内存中的服务定义 XML 存储。更改需要重新打包 CAS 并重新启动服务器

JSON 格式

请参阅本指南

将服务定义存储在平面 JSON 文件中。HA 部署需要复制服务定义。

YAML

请参阅本指南

与 JSON 相同。

GIT

请参阅本指南

将服务定义存储在 Git 存储库中。HA 部署的候选项。

MongoDb 数据库

请参阅本指南

将服务定义存储在 MongoDb 中。HA 部署的候选项。

Redis

请参阅本指南

将服务定义存储在 Redis 中。HA 部署的候选项。

LDAP 协议

请参阅本指南

将服务定义存储在目录服务器中。HA 部署的候选项。

JPA

请参阅本指南

将服务定义存储在关系数据库(Oracle、MySQL 等)中。HA 部署的候选项。

DynamoDb

请参阅本指南

在 DynamoDb 中存储服务定义。HA 部署的候选项。

亚马逊 S3

请参阅本指南

将服务定义存储在 Amazon S3 存储桶中。HA 部署的候选项。

CosmosDb 数据库

请参阅本指南

将服务定义存储在 Azure CosmosDb 中。HA 部署的候选项。

Cassandra

请参阅本指南

将服务定义存储在 Apache Cassandra 中。HA 部署的候选项。

REST

请参阅本指南

将您自己的服务注册表实现设计为 REST API。HA 部署的候选项。

自定义

请参阅本指南

使用 CAS API 作为扩展设计您自己的服务注册表。HA 部署的候选项。

        1. 我该如何选择?

菜单上有各种各样的服务注册表。选择标准概述如下:

选择您最熟悉的技术,并具备排除故障、调整和扩展的技能和耐心,以取得成功。

  1. 选择一种不会强制将 CAS 配置绑定到集群中任何单个服务器/节点的技术,因为这将带来自动扩展问题和手动操作。
  2. 选择一种与您的网络和防火墙配置配合良好且性能足够高且可靠的技术,具体取决于您的网络拓扑。
  3. 选择一种在预期负载下显示有希望的结果的技术,并运行性能和压力测试。
  4. 选择一种尽可能不依赖外部流程、系统和人工工作、自力更生且自给自足的技术。
    1. 缓存和重新加载
      1. 服务管理 - 缓存

从服务注册表加载的 CAS 服务定义使用expire-after-write过期策略进行缓存。此类定义将自动过期并从缓存中删除,除非使用显式重新加载操作强制删除。特别是,您需要确保缓存过期策略和期限不会与重新加载操作和计划冲突。例如,配置错误可能会导致缓存可能为空,而计划程序则延迟运行几分钟/秒。如果缓存为空,则来自应用程序的身份验证请求可能不会立即获得授权util 已调度加载程序有机会重新填充和重建缓存。

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

自选

笔记

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

Show  entries

搜索:

·  cas.service-registry.cache.cache-size=10000

此缓存大小指定缓存可以包含的最大条目数。请注意,缓存可能会在超过此限制之前逐出条目,或者在逐出时暂时超过阈值。当缓存大小增长到接近最大值时,缓存会移出不太可能再次使用的条目。例如,缓存可能会逐出某个条目,因为它最近没有使用或非常频繁地使用。请注意: 要禁用缓存,您可以选择缓存大小 0。

 org.apereo.cas.configuration.model.core.cache.ExpiringSimpleCacheProperties.

如何配置此属性?

·  cas.service-registry.cache.duration=PT15M

缓存持续时间 指定条目在创建后自动从缓存中删除的固定持续时间。

此设置支持java.time.Duration 语法 [?]。

 org.apereo.cas.configuration.model.core.cache.ExpiringSimpleCacheProperties.

如何配置此属性?

·  cas.service-registry.cache.initial-capacity=1000

此缓存容量设置内部数据结构的最小总大小。在构造时提供足够大的估计值可以避免以后进行昂贵的大小调整操作,但将此值设置得不必要地高会浪费内存。

 org.apereo.cas.configuration.model.core.cache.ExpiringSimpleCacheProperties.

如何配置此属性?

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

上一页1下一页

      1. 服务管理 - 重新加载

可以将 CAS 配置为按计划从连接的源和服务注册表加载服务定义。服务定义作为后台运行的作业加载,并且该操作会强制 CAS 刷新服务定义的缓存版本并使之失效,然后重新开始。

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

自选

笔记

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

Show  entries

搜索:

·  cas.service-registry.schedule.cron-expression=

一个类似 cron 的表达式,扩展了通常的 UN*X 定义,以包括秒、分钟、小时、月日、月和星期几的触发器。例如,0 * * * * MON-FRI 表示工作日每分钟一次(在分钟的顶部 - 第 0 秒),或 0 0 0 * * * 表示每天午夜。* 请注意,定义 cron 表达式时,必须删除 start delay 和 repeat interval 设置并将其设置为空白。

 org.apereo.cas.configuration.model.support.quartz.SchedulingProperties.

如何配置此属性?

·  cas.service-registry.schedule.cron-time-zone=

将解析 cron 表达式的时区。默认情况下,此属性为空(即将使用调度程序的时区)。

 org.apereo.cas.configuration.model.support.quartz.SchedulingProperties.

如何配置此属性?

·  cas.service-registry.schedule.enabled-on-host=.*

如果此属性与 CAS 服务器的主机名不匹配,则覆盖 SchedulingProperties#enabled 属性值 true。如果在 statefulset 中部署带有镜像的 CAS,其中所有名称都是可预测的,但很难为不同的服务器使用不同的配置,那么这可能很有用。该值可以是确切的主机名,也可以是将用于匹配主机名的正则表达式。

此设置支持正则表达式模式。[?].

 org.apereo.cas.configuration.model.support.quartz.SchedulingProperties.

如何配置此属性?

·  cas.service-registry.schedule.enabled=true

是否应启用计划程序来计划作业运行。

 org.apereo.cas.configuration.model.support.quartz.SchedulingProperties.

如何配置此属性?

·  cas.service-registry.schedule.repeat-interval=PT2M

为数据存储实施重新加载数据的重复间隔的字符串表示形式。这是连续任务执行之间的超时。

此设置支持java.time.Duration 语法 [?]。

 org.apereo.cas.configuration.model.support.quartz.SchedulingProperties.

如何配置此属性?

显示 1 到 5 的 6 个条目

上一页12下一页

    1. 访问策略
      1. 概述
        1. 配置服务访问策略

已注册服务的访问策略提供对服务授权规则的精细控制。它描述了是否允许服务使用 CAS 服务器、是否允许参与单点登录身份验证等。此外,它可以配置为需要一组特定的主体属性,这些属性必须存在,然后才能授予对服务的访问权限。此行为允许根据应用程序的访问角色配置各种属性,并定义在来自应用程序的身份验证请求到达时将制定和验证的规则。

策略

资源

基本

请参阅本指南

未经授权的 URL

请参阅本指南

ABAC

请参阅本指南

Groovy

请参阅本指南

基于时间

请参阅本指南

(远程)HTTP 请求

请参阅本指南

Grouper

请参阅本指南

AWS 验证权限

请参阅本指南

OpenFGA

请参阅本指南

Cerbos

请参阅本指南

Open Policy 代理

请参阅本指南

链接

请参阅本指南

自定义

请参阅本指南

        1. 执行器端点

CAS 提供以下端点:

  POST

/cas/actuator/serviceAccess 

验证是否可以向用户授予服务访问权限。

      1. 基本
        1. 服务访问策略 - 基本

默认策略允许使用以下属性配置服务:

描述

enabled

用于切换条目是否处于活动状态的标志;禁用的条目产生的行为相当于不存在的条目。

ssoEnabled

设置为 false 可强制用户对服务进行身份验证,而不管协议标志如何(例如 renew=true)。

不允许使用 CAS 的服务:

1

2

3

4

5

6

7

8

9

10

{

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

  "serviceId" : "testId",

  "name" : "testId",

  "id" : 1,

  "accessStrategy" : {

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

    "enabled" : false

  }}

不允许服务使用 CAS 进行单点登录,并且每次都会提示用户输入凭据:

1

2

3

4

5

6

7

8

9

10

{

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

  "serviceId" : "testId",

  "name" : "testId",

  "id" : 1,

  "accessStrategy" : {

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

    "ssoEnabled" : false

  }}

      1. ABAC
        1. 服务访问策略 - ABAC

基于属性的访问控制 (ABAC) 是一种授权模型,它评估主体/用户属性而不是角色来确定访问权限。使用 ABAC,访问策略根据访问请求中涉及的经过身份验证的主体/委托人、资源、操作和环境的属性来实施访问决策。委托人是请求访问资源以执行操作的用户。用户配置文件中的主体属性包括 ID、作业角色、组成员身份、部门和组织成员身份、管理级别、安全许可和其他识别标准。

 用法

请注意,主体/必需属性名称的比较区分大小写。任何单个属性名称都需要完全匹配。此外,请注意,如果 CAS 服务器配置为在发布时缓存属性,则还必须将所有必需的属性发布给依赖方。有关属性发布和过滤器的更多信息,请参阅本指南。

ABAC 策略允许配置具有以下属性的服务:

描述

requiredAttributes

所需的主体属性名称以及每个属性的值集的 Map。这些属性必须对经过身份验证的 Principal 可用,并在 CAS 继续之前解析,从而从 CAS 的角度为基于角色的访问控制提供选项。如果未显示必需的属性,则将完全忽略该检查。

requireAllAttributes

用于切换以控制所需属性的行为的标志。默认值为 true,这意味着必须存在所有必需的属性名称。否则,至少一个匹配的属性名称可能就足够了。请注意,此标志仅控制必须存在的属性名称以及属性名称的数量。如果属性名称满足 CAS 配置,则在下一步中,至少需要一个匹配的属性值才能成功进行访问策略。

caseInsensitive

指示是否应以不区分大小写的方式对 required 属性值进行匹配。默认值为 false

rejectedAttributes

被拒绝的主体属性名称的 Map 以及每个属性的值集。这些属性不得对经过身份验证的 Principal 可用,以便可以授予访问权限。如果未定义,则完全忽略检查。

您还可以优化 ABAC 策略以有条件地激活和实施策略。有关更多信息,请参阅本指南。

必需属性

可选属性

组合条件

Groovy

被拒绝的属性

使用所需主体属性名称的 Map 以及每个属性的值集来控制访问。

 支持的语法

给定属性的必需值支持正则表达式模式。例如,phone属性可能需要 \d\d\d-\d\d\d-\d\d\d\d 的值模式。

要访问该服务,主体必须具有值为 admin 的 cn 属性和值为 Administrator 的givenName 属性:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

{

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

  "serviceId" : "testId",

  "name" : "testId",

  "id" : 1,

  "accessStrategy" : {

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

    "enabled" : true,

    "ssoEnabled" : true,

    "requiredAttributes" : {

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

      "cn" : [ "java.util.HashSet", [ "admin" ] ],

      "givenName" : [ "java.util.HashSet", [ "Administrator" ] ]

    }

  }}

        1. 激活
          1. 服务访问策略 - ABAC 激活标准

可以修改 ABAC 策略以有条件地激活访问策略策略,然后,如果确定策略保持非活动状态,则可以选择决定最终访问策略结果。

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

属性

Groovy

链接

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

{

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

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

  "name" : "Example",

  "accessStrategy" : {

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

    "requiredAttributes" : {

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

      "cn" : [ "java.util.HashSet", [ "admin" ] ]

    },

    "activationCriteria": {

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

        "allowIfInactive": false,

        "operator": "AND",

        "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

请注意,如果访问策略无法激活并且必须保持非活动状态,则会通过 allowIfInactive 拒绝访问。

      1. 链接
        1. 服务访问策略 - 链接

多个访问策略可以组合在一起,形成一个链中的复杂规则和条件。使用链,可以实现高级布尔逻辑将结果分组在一起。请注意,链也可以包含其他链。

如果经过身份验证的委托人

具有值为 value1 的属性 key1 和值为 value2 的属性 key2。

…或者......

具有值为 value3 的属性 key3。

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

33

34

35

36

37

38

39

40

41

42

{

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

  "serviceId" : "^https://.+",

  "name" : "test",

  "id" : 1,

  "accessStrategy" : {

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

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

      [ {

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

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

          [

            {

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

              "requiredAttributes": {

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

                "key1": [ "java.util.LinkedHashSet", [ "value1" ] ]

              }

            },

            {

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

              "requiredAttributes": {

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

                "key2": [ "java.util.LinkedHashSet", [ "value2" ] ]

              }

            }

          ]

        ],

        "operator": "AND"

      },

        {

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

          "requiredAttributes": {

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

            "key3": [ "java.util.LinkedHashSet", [ "value3" ] ]

          }

        }

      ]

    ],

    "operator": "OR"

  }}

      1. Groovy
        1. 服务访问策略 - Groovy

所有服务和应用程序都可以使用 Groovy 脚本来执行访问策略和授权决策。此策略不与特定应用程序绑定,而是针对所有服务和集成调用。

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

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

必填

Groovy 脚本

笔记

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

Show  entries

搜索:

·  cas.access-strategy.groovy.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

8

9

10

import org.apereo.cas.audit.*import org.apereo.cas.services.*

def run(Object[] args) {

    def (context,logger) = args

    logger.debug("Checking access for ${context.registeredService}")

    def result = AuditableExecutionResult.builder().build()

    result.setException(UnauthorizedServiceException.denied("Service unauthorized"))

    return result}

以下参数将传递给脚本:

参数

描述

context

一个 AuditableContext 对象,用于传输可审计的数据,例如已注册的服务、身份验证等。

logger

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

        1. Groovy Per Service

此策略委托给 Groovy 脚本,以动态决定 CAS 在运行时针对特定服务定义请求的访问规则:

1

2

3

4

5

6

7

8

9

{

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

  "serviceId" : "^https://.+",

  "id" : 1,

  "accessStrategy" : {

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

    "groovyScript" : "file:///etc/cas/config/access-strategy.groovy"

  }}

此组件的配置有资格使用 Spring 表达式语言语法。请参阅 CAS API 文档以了解有关操作和预期行为的更多信息。

脚本本身可以通过在必要时覆盖所需的操作来设计:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

import org.apereo.cas.services.*import org.apereo.cas.authentication.principal.*

def isServiceAccessAllowed(RegisteredService registeredService, Service service) {

    registeredService != null}

def isServiceAccessAllowedForSso(RegisteredService registeredService) {

    registeredService != null}

def authorizeRequest(RegisteredServiceAccessStrategyRequest request) {

    request.service != null}

所有操作都被视为可选操作,如果在脚本中未定义,则操作的最终结果将被视为 false,并且访问被拒绝。

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

      1. Grouper
        1. 服务访问策略 - Grouper

通过在 WAR 覆盖中包含以下依赖项来启用 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-core"}

此访问策略尝试查找 CAS 委托人的 Grouper 组。Grouper 返回的组作为 CAS 属性收集,并根据服务访问所需的属性列表进行检查。

以下属性可用:

描述

groupField

将 Grouper 组转换为 CAS 属性时 Grouper 组的属性。

NAME、EXTENSION、DISPLAY_NAME DISPLAY_EXTENSION。

您还需要确保 grouper.client.properties 在 Classpath (即 src/main/resources) 上可用,并具有以下配置的属性:

1

2

3

grouperClient.webService.url = http://grouper.example.com/grouper-ws/servicesRestgrouperClient.webService.login = bandersongrouperClient.webService.password = password

基于组的显示扩展的 Grouper 访问策略:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

{

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

  "serviceId" : "^https://.+",

  "name" : "test",

  "id" : 1,

  "accessStrategy" : {

    "@class" : "org.apereo.cas.grouper.services.GrouperRegisteredServiceAccessStrategy",

    "requireAllAttributes" : true,

    "requiredAttributes" : {

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

      "grouperAttributes" : [ "java.util.HashSet", [ "faculty" ] ]

    },

    "groupField" : "DISPLAY_EXTENSION"

  }}

虽然 grouper.client.properties 是一个硬性要求并且必须提供,但配置属性始终可以分配给 strategy以覆盖默认值:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

{

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

  "serviceId" : "^https://.+",

  "name" : "test",

  "id" : 1,

  "accessStrategy" : {

    "@class" : "org.apereo.cas.grouper.services.GrouperRegisteredServiceAccessStrategy",

    "configProperties" : {

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

      "grouperClient.webService.url" : "http://grouper.example.com/grouper-ws/servicesRest"

    },

    "groupField" : "DISPLAY_EXTENSION"

  }}

您还可以考虑通过修改 /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. OpenFGA
        1. 服务访问策略 - OpenFGA

OpenFGA 是一种快速、灵活的 Fine-Grained Authorization 系统,旨在实现大规模的可靠性和低延迟。它由 Okta/Auth0 设计、构建和赞助。

此访问策略构建授权请求并将其提交到 OpenFGA 的check API 终端节点。授权请求的细节使用访问策略本身中通常定义的设置传授给 CAS:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

{

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

  "serviceId" : "^https://.+",

  "name" : "test",

  "id" : 1,

  "accessStrategy" : {

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

    "apiUrl": "http://localhost:8080",

    "object": "my-document",

    "relation": "owner",

    "storeId": "Y75hgyt75mhp",

    "token": "92d4a401-86b4-4636-b742-a7c8034756a0"

  }}

以下字段可用于此访问策略:

目的

relation

[1] 授权元组中的访问关系或类型;默认为 owner。

object

[1] 授权元组的对象;如果未定义,则默认为服务 URL。

storeId

[1] 授权存储标识符。

apiUrl

[1] OpenFGA 端点 URL。

token

[1] 如果需要,要在 Authorization 标头中使用的不记名令牌。

[1] 此字段支持 Spring 表达式语言语法。

      1. Cerbos
        1. 服务访问策略 - Cerbos

Cerbos 是一种与语言无关的开放核心可扩展授权解决方案,通过为应用程序资源编写上下文感知访问控制策略,使用户权限和授权易于实施和管理。

此访问策略构建授权请求并将其提交到 Cerbos 的 check/resources API 端点。有关授权请求的要点:

资源 ID 分配给 CAS 注册服务的数字标识符。

所有 principal 属性都打包并包含在授权请求中。

授权请求中包含有关 CAS 注册服务的以下详细信息:

serviceUrl:应用程序 URL。

serviceName:已注册的服务名称。

serviceId:已注册的服务 ID。

serviceFriendlyName:已注册的服务友好名称。

serviceType:已注册的服务类型。

授权请求的细节使用通常在访问策略本身中定义的设置教给 CAS:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

{

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

  "serviceId" : "^https://.+",

  "name" : "test",

  "id" : 1,

  "accessStrategy" : {

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

    "apiUrl": "http://localhost:3592",

    "token": "...",

    "scope": "scope1",

    "requestId": "...",

    "rolesAttribute": "memberOf",

    "kind": "kind1",

    "actions": [ "java.util.ArrayList", [ "read", "write", "view"] ],

    "auxData": {

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

        "jwt": {

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

            "token": "...",

            "keySetId": "..."

        }

    }

  }}

以下字段可用于此访问策略:

目的

apiUrl

[1] Cerbos 端点 URL 默认为 http://localhost:3592。

token

[1] 如果需要,要在 Authorization 标头中使用的不记名令牌。

requestId

[1] 请求 ID 可以是唯一标识请求的任何内容。

kind

[1] 资源类型。必填。此值用于确定要评估的资源策略。

scope

[1] 资源范围。自选。

rolesAttribute

[1] 属性名称,默认为 memberOf,表示分配给 CAS 主体的角色列表。

actions

对资源执行的操作列表。

auxData

自选。用于提供辅助数据的 block。有关更多信息,请参阅 Cerbos。

[1] 此字段支持 Spring 表达式语言语法。

      1. Permit.io
        1. 服务访问策略 - Permit.io

Permit.io 以服务形式提供权限,使开发人员能够快速将权限和访问控制融入到应用程序中。它提供了一个集中式控制面板、SDK、API 和微服务,开发人员需要添加这些微服务来创建决策和执行点。

此访问策略尝试将用户与 Permit.io 同步,然后构建授权请求并将其提交给 Permit.io。授权请求的细节使用访问策略本身中通常定义的设置传授给 CAS:

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" : "^https://.+",

  "name" : "test",

  "id" : 1,

  "accessStrategy" : {

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

    "action": "...",

    "resource": "...",

    "apiKey": "...",

    "tenant": "default",

    "pdpAddress": "https://cloudpdp.api.permit.io",

    "emailAttributeName": "email",

    "firstNameAttributeName": "firstname",

    "lastNameAttributeName": "lastname",

    "context" : {

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

      "param1" : "value1"

    }

  }}

以下字段可用于此访问策略:

目的

apiKey

[1] Permit.io API SDK 密钥,允许 SDK 进行身份验证、同步帐户等。

action

需要执行或评估的操作或权限。

resource

正在请求访问的资源。

tenant

自选。租户 ID 或密钥在 Permit.io 中定义,并在您可能拥有多个租户的情况下使用。

pdpAddress

[1] 可选。Permit.io API 终端节点。

emailAttributeName

自选。同步账户时用于标识委托人电子邮件的属性名称。

firstNameAttributeName

自选。在同步账户时用于标识委托人名字的属性名称。

lastNameAttributeName

自选。同步账户时用于标识委托人的姓氏的属性名称。

[1] 此字段支持 Spring 表达式语言语法。

      1. Open Policy 代理
        1. 服务访问策略 - 开放策略代理 (OPA)

Open Policy Agent 是一个开源的通用策略引擎,可在整个堆栈中实现统一、精细和上下文感知的策略实施。策略以高级声明性语言表示,具有给定的上下文,可促进安全、高性能、精细的控制。

此访问策略构建授权请求并通过 POST 将其提交给 OPA。授权请求的细节使用访问策略本身中通常定义的设置传授给 CAS:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

{

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

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

  "name" : "test",

  "id" : 1,

  "accessStrategy" : {

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

    "apiUrl": "http://localhost:8080",

    "decision": "example/authz/allow",

    "token": "92d4a401q26o0",

    "context" : {

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

      "param1" : "value1"

    }

  }}

以下字段可用于此访问策略:

目的

apiUrl

[1] OPA 端点 URL。

decision

在 OPA 中定义的策略决策的名称。

token

[1] 如果需要,要在 Authorization 标头中使用的不记名令牌。

context

自定义上下文,用于携带数据以协助策略决策。

[1] 此字段支持 Spring 表达式语言语法。

input 参数下的授权请求正文与以下结构匹配:

1

2

3

4

5

6

7

8

9

10

{

  "input": {

    "principal": "casuser",

    "service": "https://myapp.example.com",

    "attributes": {

      "email": ["user@example.org"]

    },

    "context": { "parameter1": "value1" }

  }}

如果策略评估成功,OPA 将返回 HTTP 200 响应代码。非 HTTP 200 响应代码指示配置或运行时错误。策略决策结果包含在响应消息正文的 result key 中:

1

2

3

{

  "result": true}

      1. AWS 验证权限
        1. 服务访问策略 - AWS Verified Permissions

Amazon Verified Permissions 是一种可扩展的权限管理和精细授权服务,适用于您构建的应用程序。

此访问策略会构建授权请求并将其提交给 Amazon Verified Permissions。授权请求的细节使用访问策略本身中通常定义的设置传授给 CAS:

1

2

3

4

5

6

7

8

9

10

11

12

{

  "@class": "org.apereo.cas.aws.authz.AmazonVerifiedPermissionsRegisteredServiceAccessStrategy",

  "credentialAccessKey": "...",

  "credentialSecretKey": "...",

  "region": "us-east-1",

  "policyStoreId": "...",

  "actionId": "read",

  "context": {

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

    "key": "value"

  }}

以下字段可用于此访问策略:

目的

credentialAccessKey

[1](可选)用于验证请求的访问密钥。

credentialSecretKey

[1](可选)用于验证请求的密钥。

region

[1](可选)用于授权 API 请求的 AWS 区域。

policyStoreId

[1](可选)此策略存储中用于使用授权的策略

context

(可选)用于精细授权决策的其他上下文。

actionId

[1] 指定要授权的请求操作。

[1] 此字段支持 Spring 表达式语言语法。

      1. HTTP 协议
        1. 服务访问策略 - HTTP 请求

此策略允许配置具有以下属性的服务:

描述

ipAddress

(可选)正则表达式模式与客户端 IP 地址进行比较。

userAgent

(可选)正则表达式模式与浏览器用户代理的比较。

headers

(可选)正则表达式模式与请求标头进行比较。

此策略的目标是检查 HTTP 请求的特定属性,并通过将这些属性与预定义的规则和模式(例如可能基于 IP 地址、用户代理等的属性)进行比较来做出服务访问决策。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

{

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

  "serviceId" : "^https://.+",

  "id" : 1,

  "accessStrategy" : {

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

    "ipAddress" : "192.\\d\\d\\d.\\d\\d\\d.101",

    "userAgent": "Chrome.+",

    "headers":{

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

      "Header1": "Value.+Pattern"

    }

  }}

      1. REST
        1. 服务访问策略 - REST

此策略允许配置具有以下属性的服务访问策略:

描述

endpointUrl

从 CAS 接收经过身份验证的委托人的授权请求的终端节点。

acceptableResponseCodes

逗号分隔的响应代码,被视为接受服务访问。

此策略的目标是确保远程终端节点可以通过接收经过 CAS 身份验证的委托人作为 GET 请求的 url 参数来做出服务访问决策。然后,将终端节点返回的响应代码与策略设置进行比较,如果找到匹配项,则授予访问权限。

以下是根据响应代码授权服务访问的远程终端节点访问策略的示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

{

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

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

  "id" : 1,

  "accessStrategy" : {

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

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

    "acceptableResponseCodes" : "200,202",

    "method": "GET",

    "headers": {

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

      "Content-Type": "application/json"

    }

  }}

      1. 时间
        1. 服务访问策略 - 时间

基于时间的访问策略允许配置具有以下属性的服务:

描述

startingDateTime

指示可以授予服务访问权限的开始日期/时间。 (即 2015-10-11T09:55:16.552-07:00)

endingDateTime

指示可以授予服务访问权限的结束日期/时间。 (即 2015-10-20T09:55:16.552-07:00)

只允许在 startingDateTime 和 endingDateTime 内进行服务访问:

1

2

3

4

5

6

7

8

9

10

11

12

{

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

  "serviceId" : "^https://.+",

  "name" : "test",

  "id" : 62,

  "accessStrategy" : {

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

    "startingDateTime" : "2015-11-01T13:19:54.132-07:00",

    "endingDateTime" : "2015-11-10T13:19:54.248-07:00",

    "zoneId" : "UTC"

  }}

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

      1. 自定义
        1. 服务访问策略 - 自定义

如果您希望创建自己的访问策略和授权策略执行器,则需要设计一个组件并将其注册到 CAS 以处理实施:

1

2

3

4

5

6

7

8

9

10

11

12

package org.apereo.cas;

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

    @Bean

    @RefreshScope(proxyMode = ScopedProxyMode.DEFAULT)

    public RegisteredServiceAccessStrategyEnforcer myEnforcer() {

        return new MyRegisteredServiceAccessStrategyEnforcer();

    }}

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

      1. 未授权的 URL
        1. 服务访问策略 - 未经授权的 URL

默认策略允许使用以下属性配置服务:

描述

unauthorizedRedirectUrl

可选 url,用于在不允许服务访问时重定向流。值可以使用 Spring 表达式语言语法。

如果委托人没有包含值 super-user 的 cn 属性,则服务访问将被拒绝。如果是这样,用户将被重定向到 https://www.github.com。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

{

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

  "serviceId" : "testId",

  "name" : "testId",

  "id": 1,

  "accessStrategy" : {

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

    "unauthorizedRedirectUrl" : "https://www.github.com",

    "requiredAttributes" : {

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

      "cn" : [ "java.util.HashSet", [ "super-user" ] ]

    }

  }}

        1. 动态 URL

如果委托人没有包含值 super-user 的 cn 属性,则服务访问将被拒绝。如果是这样,将根据指定 Groovy 脚本的结果动态确定重定向 URL。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

{

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

  "serviceId" : "testId",

  "name" : "testId",

  "id": 1,

  "accessStrategy" : {

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

    "unauthorizedRedirectUrl" : "file:/etc/cas/config/unauthz-redirect-url.groovy",

    "requiredAttributes" : {

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

      "cn" : [ "java.util.HashSet", [ "super-user" ] ]

    }

  }}

脚本本身可能采用以下形式:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

import org.apereo.cas.*

import org.apereo.cas.web.support.*

import java.util.*

import java.net.*

import org.apereo.cas.authentication.*

URI run(final Object... args) {

    def (registeredService,authentication,requestContext,applicationContext,logger) = args

    def username = authentication.principal.attributes["cn"][0] as String

    logger.info("Building URL for service {} and username {}", registeredService.name, username)

    

    /**

     * Stuff happens...

     */

    return new URI("https://www.github.com");}

为脚本提供以下参数:

描述

registeredService

表示注册表中匹配的已注册服务的对象。

authentication

表示主动身份验证事务和委托人的 Authentication 对象。

requestContext

表示 Spring Webflow RequestContext 的对象。

applicationContext

表示 Spring ApplicationContext 的对象。

logger

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

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

    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. 配置代理身份验证策略

可以为注册表中的每个注册应用程序分配一个代理策略,以确定是否允许该服务进行代理身份验证。这意味着,除非将代理策略配置为允许 PGT,否则不会向服务颁发 PGT。此外,该策略还可以定义实际上允许哪些端点 URL 接收 PGT。

请注意,默认情况下,所有应用程序都不允许使用代理身份验证。

 使用警告!

此功能特别适用于理解和使用 CAS 协议的应用程序。在允许应用程序执行代理身份验证之前,请仔细考虑。盲目授权应用程序接收代理授予票证可能会产生安全泄漏和攻击的机会。确保您确实需要启用这些功能,并且您了解原因。尽可能避免。

拒绝

正则表达式

REST

不允许对服务进行代理身份验证。这是默认策略,无需显式配置。

1

2

3

4

5

6

7

8

9

{

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

  "serviceId" : "testId",

  "name" : "testId",

  "id" : 1,

  "proxyPolicy" : {

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

  }}

    1. 主体 ID
      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。

供应商

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

供应商

描述

Default

请参阅本指南

属性

请参阅本指南

Groovy

请参阅本指南

匿名

请参阅本指南

加密

请参阅本指南

静态的

请参阅本指南

    1. 支持的协议
      1. 配置服务协议

向 CAS 注册并打算使用 CAS 协议的应用程序可以选择指示它们对特定 CAS 协议版本的支持。如果服务注册记录声明支持特定 CAS 协议版本,则使用其他 CAS 协议版本验证服务票证的尝试将被阻止,并且应该会失败。

 用法

此功能特别适用于 CAS 注册的服务应用程序。

默认情况下,出于向后兼容性的原因,如果没有为服务注册记录指定支持的协议,则允许使用所有 CAS 协议版本。

示例 JSON 文件如下:

1

2

3

4

5

6

7

{

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

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

  "name" : "App",

  "id" : 1,

  "supportedProtocols": [ "java.util.HashSet", ["CAS10", "CAS20"] ]}

接受的值如下:

存储

描述

SAML1

请参阅本指南

CAS10

请参阅本指南

CAS20

请参阅本指南

CAS30

请参阅本指南

    1. 模板和蓝图
      1. 服务模板定义

已注册的服务模板定义是构建服务定义的基础和初始构建块。作为蓝图,模板定义将为给定的已注册服务定义指定一个框架。例如,服务模板定义可能希望为给定服务类型指定一组通用设置和应用程序策略,例如属性发布和同意策略,以消除在可能源自该蓝图的未来服务定义中再次指定这些策略的需要。具体的服务定义将自动继承模板的未来改进/更改。

几个重要的注意事项:

具体的服务定义始终能够覆盖模板定义并强制执行自己的策略和设置以允许异常。他们的配置和策略版本将始终覆盖基本模板。合并过程并没有完全微调以挑选出 configuration blocks 中的个体差异。

具体的服务定义可以使用其模板名称和类型与模板定义链接。此设计选择允许 CAS 部署程序为相同类型的 CAS 应用程序定义多个具有不同名称的服务定义蓝图和模板。

构建和分拆蓝图不需要服务定义,并且可以以独立方式保留和运行。

模板定义和具体定义之间的关系和继承层次结构在一个级别或程度上是固定的,并且不是递归的。但是,组合比继承更受欢迎,您可以以逗号分隔的方式将多个模板定义名称分配给具体服务。

 用法

模板服务定义适用于 CAS 已知的所有类型的已注册服务定义,并且不限于特定类型或协议。合并操作后生成的服务定义始终是 CAS 的内部定义,不是您可以单独管理和/或维护的内容。

模板服务定义的目录位置需要通过设置教给 CAS。此目录应保存.json服务定义文件,这些文件在结构上与 CAS 中任何给定的已注册服务没有什么不同。该目录是递归搜索模板定义的,你可以想出自己的目录结构,按类型、应用程序等对定义进行分组。

请记住,服务模板定义文件名必须与模板名称本身匹配。命名模板定义文件的公式应为:

1

templateFileName = templateName + ".json"

      1. 配置

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

必填

笔记

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

Show  entries

搜索:

·  cas.service-registry.templates.directory.location=

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

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

如何配置此属性?

显示 1 到 1 的 1 个条目

上一页1下一页

请注意,处理模板服务定义需要编写脚本。要准备 CAS 以支持 Apache Groovy 并与之集成,请查看本指南。

      1. 例子

请考虑以下基本模板服务定义,该定义存储在 AllLibraryApplications.json 文件中,用于尚未注册的 CAS 应用程序:

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",

  "templateName": "AllLibraryApplications",

  "attributeReleasePolicy" : {

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

    "allowedAttributes" : [ "java.util.ArrayList", [ "email", "username" ] ],

    "consentPolicy": {

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

      "includeOnlyAttributes": ["java.util.LinkedHashSet", ["email", "username"]],

      "status": "TRUE"

    }    

  },

  "usernameAttributeProvider" : {

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

    "usernameAttribute" : "email",

    "canonicalizationMode" : "LOWER"

  },

  "properties" : {

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

      "prop1": {

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

        "values" : [ "java.util.HashSet", [ "false" ] ]

      },

      "prop2" : {

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

        "values" : [ "java.util.HashSet", [ "hello-world" ] ]

      }

    }

  }

可能存在以下变化:

使用覆盖

无覆盖

多个模板

GROOVY 模板

具体的服务定义可以与模板链接:

1

2

3

4

5

6

7

8

9

10

11

12

{

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

  "serviceId": "^https://library.org/app/.+",

  "name": "Library",

  "templateName": "AllLibraryApplications",

  "id": 1,

  "description": "My application",

  "usernameAttributeProvider" : {

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

    "usernameAttribute" : "givenName",

  }}

当 CAS 在内部处理和加载时,最终结果将是以下定义:

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",

  "name": "Library",

  "templateName": "AllLibraryApplications",

  "serviceId": "^https://library.org/app/.+",

  "id": 1,

  "description": "My application",

  "attributeReleasePolicy" : {

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

    "allowedAttributes" : [ "java.util.ArrayList", [ "email", "username" ] ],

    "consentPolicy": {

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

      "includeOnlyAttributes": ["java.util.LinkedHashSet", ["email", "username"]],

      "status": "TRUE"

    }    

  },

  "usernameAttributeProvider" : {

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

    "usernameAttribute" : "givenName",

  },

  "properties" : {

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

      "prop1": {

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

        "values" : [ "java.util.HashSet", [ "false" ] ]

      },

      "prop2" : {

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

        "values" : [ "java.util.HashSet", [ "hello-world" ] ]

      }

    }

  }

    1. 自定义属性
      1. 配置服务自定义属性

CAS 能够向已注册的服务添加任意属性。这些属性被视为有关服务的额外元数据,用于指示联系人电话号码、电子邮件等设置,或者是扩展可能用于每个服务的自定义功能的额外属性和字段。

示例 JSON 文件如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

{

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

  "serviceId" : "^https://.+",

  "name" : "sample service",

  "id" : 100,

  "properties" : {

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

    "email" : {

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

      "values" : [ "java.util.HashSet", [ "person@place.edu", "admin@place.edu" ] ]

    }

  }}

已注册的服务属性值可以使用 Spring 表达式语言语法。

请注意,您还可以扩展 CAS 配置架构以定义您自己的自定义属性。

      1. 支持的属性

CAS 为各种模块和功能提供并识别以下属性:

Show  entries

搜索:

名字

默认值

类型

accessTokenAsJwtCipherStrategyType

ENCRYPT_AND_SIGN

STRING

JWT_ACCESS_TOKENS

accessTokenAsJwtEncryptionAlg

STRING

JWT_ACCESS_TOKENS

accessTokenAsJwtEncryptionEnabled

false

BOOLEAN

JWT_ACCESS_TOKENS

accessTokenAsJwtEncryptionKey

STRING

JWT_ACCESS_TOKENS

accessTokenAsJwtSigningEnabled

true

BOOLEAN

JWT_ACCESS_TOKENS

显示 1 到 5 的 69 个条目

上一页12345...14下一页

    1. 响应类型
      1. 配置服务响应类型

默认情况下,身份验证请求通过浏览器重定向(即 302)返回调用应用程序来处理,并在 url 中内置相关参数。可以选择性地基于每个服务调整此行为,以指示响应服务时的其他选项。

 用法

此功能特别适用于理解和使用 CAS 协议的应用程序。

示例 JSON 文件如下:

1

2

3

4

5

6

7

{

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

  "serviceId" : "^https://.+",

  "name" : "sample service",

  "id" : 100,

  "responseType": "HEADER"}

接受的响应类型如下:

参数

描述

REDIRECT

这是默认选项,其中浏览器 302 重定向将用户导航回调用应用程序。

POST

与上述相同,只是参数被 POST返回给调用应用程序。

HEADER

为此身份验证请求构建的参数将作为标头插入到 HTTP 响应中

    1. 单点登录策略
      1. 配置服务 SSO 策略

基于每个服务设计的单点登录参与策略应覆盖全局 SSO 行为。此类策略通常适用于参与单点登录会话、创建 SSO Cookie 等。

      1. 禁用服务 SSO 访问

可以按应用程序禁用对现有单点登录会话的参与。例如,以下服务将要求每次都提供凭据,因此不使用 SSO:

1

2

3

4

5

6

7

8

9

10

{

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

  "serviceId" : "...",

  "name" : "...",

  "id" : 1,

  "accessStrategy" : {

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

    "ssoEnabled" : false

  }}

      1. 单点登录 Cookie

CAS 采用者可能希望允许这样一种行为:通过 CAS 登录到未参与 SSO 的应用程序时,要么不创建 CAS SSO 会话,要么不遵循它创建的 SSO 会话,以便随后对参与 SSO 的应用程序进行身份验证。此行为可以基于每个服务进行定义。

1

2

3

4

5

6

7

8

9

10

{

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

  "serviceId" : "...",

  "name" : "...",

  "id" : 1,

  "singleSignOnParticipationPolicy": {

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

    "createCookieOnRenewedAuthentication": "TRUE"

  }}

createCookieOnRenewedAuthentication 的可接受值为 TRUEFALSE 或 UNDEFINED。

      1. 参与政策

可以为每个服务定义分配其他策略,以控制应用程序对现有单点登录会话的参与。如果条件成立,CAS 应遵循现有的 SSO 会话,并且不会询问用户的凭据。如果条件失败,则可能会要求 user提供凭据。此类策略可以链接在一起并按顺序执行。

认证日期

上次使用时间

属性

Groovy

自定义

如果身份验证日期最多为 5 秒,请遵循现有的单点登录会话(如果有)。否则,质询用户以获取凭据并忽略现有会话。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

{

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

  "serviceId" : "...",

  "name" : "...",

  "id" : 1,

  "singleSignOnParticipationPolicy":

    {

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

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

        [

          {

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

            "timeUnit": "SECONDS",

            "timeValue": 5,

            "order": 0

          }

        ]

      ]

    }}

    1. 撮合策略
      1. 配置服务匹配策略

携带客户端应用程序标识符的身份验证请求将与分配给服务定义的服务标识符进行比较。默认情况下,服务标识符被视为正则表达式模式,需要对其进行正确编码和定义才能成功执行匹配操作。此策略可以基于每个服务进行定义,以允许替代选项或可能需要考虑外部因素和变量的完整策略实施。

 用法

请注意,您不能将应用程序的 IP 地址列入白名单。您只能将应用程序 URL 列入白名单。应用程序的标识符几乎总是其 URL;而不是它的来源或起源。在应用程序可能提供相同 IP 地址和多个 URL 的情况下,每个 URL 都需要向 CAS 注册,或者您可能会想出一个捕获所有 URL 形式的统一模式。

完全正则表达式

部分正则表达式

字面

这是将 serviceId 视为正则表达式的默认选项。使用此选项,CAS 会尝试将表达式与请求的整个服务标识符进行匹配,并在定义的模式的开头隐式添加 ^,在结尾隐式添加 $,这意味着它不会查找子字符串匹配项。

示例 JSON 文件如下:

1

2

3

4

5

6

7

8

9

{

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

  "serviceId": "https://.*",

  "name": "sample",

  "id": 1,

  "matchingStrategy": {

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

  }}

    1. 历史和版本
      1. 服务变更管理和历史

CAS 能够跟踪和管理对服务定义的更改,并保留对服务定义所做更改的历史记录。变更管理和历史记录跟踪位于核心 CAS 服务管理工具的外部和之上,因此旨在与 CAS 支持的任何类型的服务注册表一起使用。

更改跟踪的工作原理是拦截需要修改服务定义的 CAS 服务注册表的所有操作,并尝试在执行操作后存储一次服务定义的快照。有了足够的历史记录,就可以开始审核更改或查看历史更改。

此功能主要由 Javers 库提供支持。

通过将以下模块添加到覆盖中来启用支持:

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-javers"}

      1. MongoDb 存储

默认情况下,对应用程序定义和服务的更改被审计、跟踪并存储在 MongoDb 数据库中。您需要在 CAS 配置中定义连接设置和详细信息以指向 MongoDb 实例,其余部分由 CAS 自动处理。

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

必填

自选

笔记

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

Show  entries

搜索:

·  cas.javers.mongo.client-uri=

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

 org.apereo.cas.configuration.model.support.javers.JaversMongoDbProperties.

如何配置此属性?

·  cas.javers.mongo.database-name=

MongoDb 数据库实例名称。

 org.apereo.cas.configuration.model.support.javers.JaversMongoDbProperties.

如何配置此属性?

·  cas.javers.mongo.host=localhost

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

 org.apereo.cas.configuration.model.support.javers.JaversMongoDbProperties.

如何配置此属性?

·  cas.javers.mongo.password=

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

 org.apereo.cas.configuration.model.support.javers.JaversMongoDbProperties.

如何配置此属性?

·  cas.javers.mongo.port=27017

MongoDb 数据库端口。

 org.apereo.cas.configuration.model.support.javers.JaversMongoDbProperties.

如何配置此属性?

显示 1 到 5 的 6 个条目

上一页12下一页

      1. 执行器端点

CAS 提供以下端点:

  GET

/cas/actuator/entityHistory/registeredServices/{id} 

按 ID 获取服务的历史记录。

  GET

/cas/actuator/entityHistory/registeredServices/{id}/changelog 

    1. HTTP 安全标头
      1. 服务 HTTP 安全标头

CAS 能够基于每个服务控制是否应将某些与安全相关的 HTTP 标头注入到响应中。虽然标头通常作为 CAS 安全筛选器的一部分进行全局启用和定义,但此处描述的策略允许为某些应用程序和服务请求禁用/启用这些标头的注入,并覆盖全局默认值。

      1. 全局配置

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

必填

自选

笔记

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

Show  entries

搜索:

·  cas.http-web-request.cors.enabled=false

是否应为 http 请求启用 CORS。

 org.apereo.cas.configuration.model.core.web.security.HttpCorsRequestProperties.

如何配置此属性?

·  cas.http-web-request.header.enabled=true

允许 CAS 通过 http 过滤器注入和强制实施 http 安全标头,此处概述了缓存、HSTS 等。

 org.apereo.cas.configuration.model.core.web.security.HttpHeadersRequestProperties.

如何配置此属性?

显示 1 到 2 的 2 个条目

上一页1下一页

      1. 服务 HTTP 标头

CAS 为各种模块和功能提供并识别以下属性:

Show  entries

搜索:

名字

默认值

类型

httpHeaderEnableCacheControl

true

BOOLEAN

HTTP_HEADERS

httpHeaderEnableContentSecurityPolicy

true

STRING

HTTP_HEADERS

httpHeaderEnableStrictTransportSecurity

true

BOOLEAN

HTTP_HEADERS

httpHeaderEnableXContentOptions

true

BOOLEAN

HTTP_HEADERS

httpHeaderEnableXFrameOptions

true

BOOLEAN

HTTP_HEADERS

显示 1 到 5 的 8 个条目

上一页12下一页

示例 JSON 文件如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

{

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

  "serviceId" : "^https://.+",

  "name" : "sample service",

  "id" : 100,

  "properties" : {

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

    "httpHeaderEnableXContentOptions" : {

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

      "values" : [ "java.util.HashSet", [ "true" ] ]

    }

  }}

      1. CORS 策略

跨域资源共享 (CORS) 策略也可以以服务属性的形式为每个应用程序定义。

CAS 为各种模块和功能提供并识别以下属性:

Show  entries

搜索:

名字

默认值

类型

corsAllowCredentials

false

BOOLEAN

CORS

corsAllowedHeaders

STRING

CORS

corsAllowedMethods

STRING

CORS

corsAllowedOriginPatterns

STRING

CORS

corsAllowedOrigins

STRING

CORS

显示 1 到 5 的 7 个条目

上一页12下一页

示例 JSON 文件如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

{

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

  "serviceId" : "^https://.+",

  "name" : "sample service",

  "id" : 100,

  "properties" : {

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

    "corsMaxAge" : {

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

      "values" : [ "java.util.HashSet", [ "1000" ] ]

    }

  }}

    1. 联系人和所有者
      1. 配置服务联系人

CAS 能够将联系人信息分配给服务定义。这些是可以归类为应用程序所有者的个人和/或实体,如果更改应用于服务定义,则可能会收到通知。

示例 JSON 文件如下:

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://.+",

  "name" : "sample service",

  "id" : 100,

  "contacts": [

    "java.util.ArrayList", [{

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

        "name": "John Smith",

        "email": "jsmith@example.org",

        "phone": "123-456-7890",

        "department": "IT",

        "type": "ADMIN"

      }

    ]

  ]}

    1. 过期策略
      1. 配置服务过期策略

可以为向 CAS 注册的应用程序分配一个可选的过期策略,该策略控制注册的生存期。一旦服务被视为过期,它将自动禁用或从 CAS 注册表中删除,并且将通过电子邮件或短信通知定义和分配给该服务的相关联系人。

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

必填

自选

电子邮件服务器

笔记

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

Show  entries

搜索:

·  cas.service-registry.mail.attribute-name=

指示此邮件的目标电子邮件地址的主体属性名称。这些属性必须已解析并可供 CAS 主体使用。当指定了多个属性时,将根据可用的 CAS 主体检查每个属性,以查找电子邮件地址值,这可能会导致发送多封电子邮件。

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

 org.apereo.cas.configuration.model.support.email.EmailProperties.

如何配置此属性?

·  cas.service-registry.mail.from=

电子邮件发件人地址。

 org.apereo.cas.configuration.model.support.email.EmailProperties.

如何配置此属性?

·  cas.service-registry.mail.subject=

主题可以定义为 verbaitm,也可以使用语法 #{subject-language-key} 指向语言包中的消息键。此键应指向在相应语言包中定义的有效消息,然后通过活动区域设置选取该消息。如果语言代码无法解析实际主题,则将使用默认主题值。

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

 org.apereo.cas.configuration.model.support.email.EmailProperties.

如何配置此属性?

·  cas.service-registry.sms.attribute-name=

指示此 SMS 消息的目标电话号码的主体属性名称。该属性必须已解析并可供 CAS 主体使用。

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

 org.apereo.cas.configuration.model.support.sms.SmsProperties.

如何配置此属性?

·  cas.service-registry.sms.from=

邮件的发件人地址。

 org.apereo.cas.configuration.model.support.sms.SmsProperties.

如何配置此属性?

显示 1 到 5 的 6 个条目

上一页12下一页

示例 JSON 文件如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

{

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

  "serviceId" : "^https://.+",

  "name" : "sample service",

  "id" : 100,

  "expirationPolicy": {

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

    "deleteWhenExpired": true,

    "notifyWhenDeleted": false,

    "notifyWhenExpired": false,

    "expirationDate": "2017-10-05"

  }}

默认情况下,以下设置可用于过期策略:

描述

expirationDate

注册记录被视为过期的日期。到期日期可以以 2011-12-03T10:15:30、09/24/1980 04:30 PM、09/24/2014 6:30 AM、09/24/2013 18:45、09/24/2017 或 2017-10-25 格式指定。

deleteWhenExpired

如果true,则在过期时从 CAS 服务注册表中删除应用程序。否则,应用程序记录将被标记为已禁用。

notifyWhenDeleted

通过电子邮件或文本通知应用程序的联系人,前提是定义了具有电子邮件地址或电话号码的有效联系人,并且 CAS 配置为发送电子邮件消息或 SMS 通知。仅当应用程序已过期且即将从注册表中删除时,才会发送通知。

notifyWhenExpired

通过电子邮件或文本通知应用程序的联系人,前提是定义了具有电子邮件地址或电话号码的有效联系人,并且 CAS 配置为发送电子邮件消息或 SMS 通知。仅当应用程序过期时,才会发送通知。

    1. 身份验证策略
      1. 服务认证策略

注册中心中的每个注册应用程序都可以分配一个身份验证策略,该策略指示 CAS在处理给定服务时应如何验证和执行身份验证事务。身份验证策略有时可能会覆盖 CAS 身份验证引擎中全局找到的内容,或者它可能提供补充功能以增强身份验证流程。

1

2

3

4

5

6

7

8

9

10

11

{

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

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

  "name" : "ExampleApp",

  "id" : 1,

  "authenticationPolicy" : {

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

    "requiredAuthenticationHandlers" : ["java.util.TreeSet", [ "AuthNHandlerName" ]],

    "excludedAuthenticationHandlers" : ["java.util.TreeSet", [ ]]

  }}

可以将以下字段分配给策略:

参数

描述

requiredAuthenticationHandlers

CAS 中可用和配置的所需身份验证处理程序的一组标识符/名称。这些名称可用于强制服务定义在向 CAS 提交身份验证请求时仅使用带有该名称的身份验证策略。

excludedAuthenticationHandlers

一组用于排除的身份验证处理程序的标识符/名称。这些名称可用于强制执行服务定义,以便在向 CAS 提交身份验证请求时排除和取消某些身份验证处理程序的资格。

请注意,虽然 CAS 中的所有身份验证方法都被赋予了默认名称,但大多数(如果不是全部)方法都可以通过 CAS 设置被赋予一个名称。

      1. 身份验证策略标准

还可以将身份验证策略条件分配给每个应用程序定义,这应该覆盖为部署定义的全局策略。此类策略应紧随那些可以全局定义的策略之后,这些策略完全是可选的,可以是以下类型之一:

        1. 允许

映射到 Required authentication 策略。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

{

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

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

  "name": "Example",

  "id": 1,

  "authenticationPolicy": {

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

    "requiredAuthenticationHandlers" : ["java.util.TreeSet", [ "JSON" ]],

    "criteria": {

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

      "tryAll: false

    }

  }

}

tryAll 标志将确保当前身份验证事务中收集的凭据总数与所有身份验证成功和失败的总和匹配。

        1. 排除

启用身份验证策略条件,以按名称排除和取消指示的身份验证处理程序的资格。

1

2

3

4

5

6

7

8

9

10

11

12

13

{

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

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

  "name": "Example",

  "id": 1,

  "authenticationPolicy": {

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

    "excludedAuthenticationHandlers" : ["java.util.TreeSet", [ "JSON" ]],

    "criteria": {

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

    }

  }}

        1. 任何

映射到 Any 身份验证策略。

1

2

3

4

5

6

7

8

9

10

11

12

13

{

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

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

  "name" : "ExampleApp",

  "id" : 1,

  "authenticationPolicy" : {

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

    "criteria": {

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

      "tryAll": true

    }

  }}

映射到 All (All) 身份验证策略。

1

2

3

4

5

6

7

8

9

10

11

12

{

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

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

  "name" : "ExampleApp",

  "id" : 1,

  "authenticationPolicy" : {

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

    "criteria": {

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

    }

  }}

        1. 未阻止

映射到 Not Prevented 身份验证策略。

1

2

3

4

5

6

7

8

9

10

11

12

{

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

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

  "name" : "ExampleApp",

  "id" : 1,

  "authenticationPolicy" : {

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

    "criteria": {

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

    }

  }}

        1. Groovy

映射到 Groovy 身份验证策略。

1

2

3

4

5

6

7

8

9

10

11

12

13

{

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

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

  "name" : "ExampleApp",

  "id" : 1,

  "authenticationPolicy" : {

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

    "criteria": {

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

      "script": "..."

    }

  }}

script 属性可以是内联 Groovy 脚本或对外部文件的引用。要准备 CAS 以支持 Apache Groovy 并与之集成,请查看本指南。

        1. REST

映射到 Rest 身份验证策略。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

{

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

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

  "name" : "ExampleApp",

  "id" : 1,

  "authenticationPolicy" : {

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

    "criteria": {

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

      "url": "...",

      "basicAuthUsername": "...",

      "basicAuthPassword": "..."

    }

  }}

    1. 环境
      1. 配置服务环境

可以为注册表中的每个已注册应用程序分配一组环境名称。环境名称充当过滤器,允许 CAS 仅在运行时环境实际上与已注册的服务环境匹配时加载和遵循已注册的服务定义。这允许向 CAS 多次注册同一应用程序的多个版本,其中每个版本可能仅与特定的运行时配置文件相关。可以在 CAS 中使用指定为环境变量或命令行标志等的spring.profiles.active属性来激活环境。

例如,仅当运行时环境配置文件是 production 或 pre-production 之一时,CAS 才会识别和加载以下服务定义:

1

2

3

4

5

6

7

{

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

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

  "name" : "ExampleApp",

  "id" : 1,

  "environments" : [ "java.util.HashSet", [ "production", "pre-production" ] ]}

请注意,无论运行时配置文件如何,都将加载没有分配环境的已注册服务定义。同样,如果 CAS 设置为在没有活动配置文件的情况下运行,则所有服务定义都被视为符合条件。

    1. 复制
      1. 配置服务复制

如果 CAS 服务定义不是通过集中式存储进行全局管理的,则当部署多个节点时,需要在集群中的所有 CAS 节点之间保持定义同步。当此类定义的管理策略是将它们存储在每个节点(例如 JSON 或 YAML)文件的本地磁盘上时,可以使用以下机制将文件从一个主机复制到另一个主机。

      1. Native

可以使用 rsync 等功能安排后台任务,以将文件从主机复制到另一台主机。当然,该作业需要定期运行,以确保配置保持同步。这是最简单的选项,因为 CAS 完全不知道后台的额外进程。

在 Linux 计算机上,rsync 可以安装为:

1

2

# yum install rsync (On Red Hat based systems)# apt-get install rsync (On Debian based systems)

例如,此命令会将目录 /etc/cas/services 从本地计算机同步到远程服务器:

1

rsync -avz /etc/cas/services root@192.168.0.101:/etc/cas/services

与上述命令完全相反的命令可以这样执行:

1

rsync -avzh root@192.168.0.100:/etc/cas/services /etc/cas/services

要通过 ssh 执行传输操作,请使用 ssh --progress 标志。

要在模拟模式下测试命令执行,请使用 --dry-run 标志。

      1. 配置

以下设置控制 Service Registry 复制的 common 和 cor 行为:

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

自选

笔记

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

Show  entries

搜索:

·  cas.service-registry.stream.core.enabled=true

是否应在 CAS 集群中流式传输和发布服务注册表事件。一个典型的工作流是在一个主节点上启用发布者,并让其他节点使用来自上游主节点的定义和更改,以避免覆盖和计时问题,因为如果 Service Registry 计划没有正确计时,更改可能会相互重叠。

 org.apereo.cas.configuration.model.support.services.stream.StreamingServicesCoreProperties.

如何配置此属性?

·  cas.service-registry.stream.core.replication-mode=PASSIVE

指示复制 mod。可用值如下:

ACTIVE在此复制模式下,所有 CAS 节点将尝试在每个节点上单独同步服务定义文件的副本。

PASSIVE在此复制模式下,将一个 CAS 服务指定为主服务器,它在本地包含所有服务定义文件,并将更改流式传输到其他 CAS 被动节点。被动 CAS 节点仅访问 replicationcache 来检索服务,不会在磁盘上单独保留服务定义文件的副本。

 org.apereo.cas.configuration.model.support.services.stream.StreamingServicesCoreProperties.

如何配置此属性?

显示 1 到 2 的 2 个条目

上一页1下一页

可以使用下面列出的方法之一配置复制策略。

        1. Hazelcast

如果您不想求助于外部工具和流程,或者如果您的部署的原生选项不是那么有吸引力,您可以利用 CAS 自己的工具,该工具通过 Hazelcast 提供分布式缓存,以在整个集群中广播服务定义文件,并根据需要添加/删除/更新每个节点。当 CAS 加载服务定义时,事件将广播到集群中的所有 CAS 节点,以获取更改并保持定义同步。

通过在覆盖中包含以下依赖项来启用支持:

Apache Maven

Gradle

BOM - Spring

BOM - Gradle

资源

1

implementation "org.apereo.cas:cas-server-support-service-registry-stream-hazelcast:${project.'cas.version'}"

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

必填

自选

Groovy 脚本

笔记

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

Show  entries

搜索:

·  cas.service-registry.stream.hazelcast.config.cluster.core.instance-name=

实例名称。

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

 org.apereo.cas.configuration.model.support.hazelcast.HazelcastCoreClusterProperties.

如何配置此属性?

·  cas.service-registry.stream.hazelcast.config.cluster.discovery.aws.access-key=

AWS 访问密钥。

 org.apereo.cas.configuration.model.support.hazelcast.discovery.HazelcastAwsDiscoveryProperties.

如何配置此属性?

·  cas.service-registry.stream.hazelcast.config.cluster.discovery.aws.secret-key=

AWS 密钥。

 org.apereo.cas.configuration.model.support.hazelcast.discovery.HazelcastAwsDiscoveryProperties.

如何配置此属性?

·  cas.service-registry.stream.hazelcast.config.cluster.discovery.azure.client-id=

Azure Active Directory 服务主体客户端 ID。

 org.apereo.cas.configuration.model.support.hazelcast.discovery.HazelcastAzureDiscoveryProperties.

如何配置此属性?

·  cas.service-registry.stream.hazelcast.config.cluster.discovery.azure.client-secret=

Azure Active Directory 服务主体客户端密码。

 org.apereo.cas.configuration.model.support.hazelcast.discovery.HazelcastAzureDiscoveryProperties.

如何配置此属性?

显示 1 到 5 共 17 个条目

上一页1234下一页

        1. Apache Kafka

如果您不想求助于外部工具和流程,或者如果您的部署的本机选项不是那么有吸引力,您可以利用 CAS 自己的工具,该工具通过 Apache Kafka 提供分布式缓存,以在整个集群中广播服务定义文件,并根据需要添加/删除/更新每个节点。当 CAS 加载服务定义时,事件将广播到集群中的所有 CAS 节点,以获取更改并保持定义同步。

通过在覆盖中包含以下依赖项来启用支持:

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-service-registry-stream-kafka"}

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

自选

笔记

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

Show  entries

搜索:

·  cas.service-registry.stream.kafka.bootstrap-address=

Kafka 引导服务器地址(即 localhost:9092)。

 org.apereo.cas.configuration.model.support.services.stream.hazelcast.StreamServicesKafkaProperties.

如何配置此属性?

·  cas.service-registry.stream.kafka.topic.compression-type=gzip

指定给定主题的最终压缩类型。此配置接受标准压缩编解码器('gzip', 'snappy', 'lz4', 'zstd')。它还接受 'uncompressed',这相当于没有压缩;以及 'producer',表示保留 producer 设置的原始压缩编解码器。

 org.apereo.cas.configuration.model.support.kafka.KafkaSingleTopicProperties.

如何配置此属性?

·  cas.service-registry.stream.kafka.topic.config=

其他配置选项,如 TopicConfig 所指出的那样。

 org.apereo.cas.configuration.model.support.kafka.KafkaSingleTopicProperties.

如何配置此属性?

·  cas.service-registry.stream.kafka.topic.name=

设置 Topic 的名称。

 org.apereo.cas.configuration.model.support.kafka.KafkaSingleTopicProperties.

如何配置此属性?

·  cas.service-registry.stream.kafka.topic.partitions=1

设置分区数(默认为 1)。

 org.apereo.cas.configuration.model.support.kafka.KafkaSingleTopicProperties.

如何配置此属性?

显示 1 到 5 的 6 个条目

上一页12下一页

      1. 复制模式

当 CAS 配置为以主动-主动模式复制服务定义时,您需要确保仔细调整服务注册表计划程序,以避免意外和覆盖。同样,如果 CAS 设置为监视更改,则需要对 CAS 服务注册表目录的临时动态更改进行相同类型的检查和验证。复制和计划的延迟可能会强制一个节点覆盖对另一个节点的更改。

例如,请考虑以下场景:CAS 集群中有两个节点,其中 CAS1 设置为监控节点 N1 上 /etc/cas/services 的更改,而 CAS2 监控节点 N2 上的 /etc/cas/services 目录。N1 和 N2 在启动时都会尝试引导彼此的服务定义副本,以确保所有内容都正确同步。

现在让我们考虑一个文件 /etc/cas/services/App-100.json 已从 N2 中删除。在从 N2 将更改广播到 N1 的时间内,N2 的服务注册表调度程序很可能也会唤醒并尝试通过从分布式缓存中同步其服务定义文件的副本来恢复世界状态,这意味着 N2 将从 N1 获取已删除服务的副本,并将恢复已删除的文件恢复回来。当服务注册表调度程序设置为非常激进的超时时,通常会出现这种情况,并且大多数情况下可以通过放宽重新加载操作以在较长的调度程序(例如每 2 小时一次)上运行来避免。或者,您可以决定运行主动-被动设置,只让一个主节点生成和广播更改,而其他从/被动节点仅在需要时使用更改。

    1. 自动初始化
      1. Service Registry 初始化

在启动和配置允许的情况下,注册表能够从 CAS 可用的默认 JSON 服务定义自动初始化自身。使用一组默认服务填充注册表是一个起点和一个示例,在该示例中,您可以立即开始集成应用程序。出于生产目的,建议您选择更相关的存储选项并禁用此行为。

默认情况下,初始化器组件使用的默认服务定义附带 CAS 并放在 Classpath 上。初始化器能够检测在 Classpath 上找到的所有服务定义文件(即 src/main/resources/services)并将它们导入到使用的实际服务注册表中,同时还考虑了所有活动的 Spring 应用程序配置文件。例如,如果当前的 Spring 应用程序配置文件是 dev 和 qa,则 CAS 将评估以下位置以查找服务定义:

classpath*:/services/dev/*.json

classpath*:/services/qa/*.json

classpath*:/services/*.json

这意味着,如果启用了此行为,并且在 Classpath 的相关路径中找到其他文件,则 CAS 将采用默认服务以及找到的任何和所有其他服务,以便将它们导入到所使用的服务注册表中。请注意,JSON 文件的位置虽然通常设置为 Classpath,但可以通过 CAS 属性进行控制;初始化逻辑使用控制 JSON 服务注册表的 JSON 服务文件位置的相同设置属性来查找服务文件。

同样,此行为仅用作起点、示例以及小型和专业部署。建议您对注册表进行显式控制,并注册您已完全授权的服务和应用程序。

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

自选

笔记

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

Show  entries

搜索:

·  cas.service-registry.core.index-services=true

当设置为 true 时,CAS 会为已注册服务的特定预选字段创建内存中索引,从而允许它按其友好名称、客户端 ID 等查找服务定义。这对于 OAuth 或 OpenID Connect 中的查询操作特别有用,因为无需遍历所有服务定义来查找匹配的客户端 ID。索引允许 CAS 对加载的服务对象执行直接查询,以查找相关定义。

 org.apereo.cas.configuration.model.core.services.ServiceRegistryCoreProperties.

如何配置此属性?

·  cas.service-registry.core.init-default-services=true

指示是否应将默认随 CAS 附带的服务定义包含在初始化过程中并导入到 CAS 服务注册表中的标志。CAS 附带的默认服务文件位于 JsonServiceRegistryProperties#DEFAULT_LOCATION_DIRECTORY 目录内的 Classpath 中。

 org.apereo.cas.configuration.model.core.services.ServiceRegistryCoreProperties.

如何配置此属性?

·  cas.service-registry.core.init-from-json=false

您还可以通过 #isInitDefaultServices() 控制是否应包含和初始化 default 服务。

 org.apereo.cas.configuration.model.core.services.ServiceRegistryCoreProperties.

如何配置此属性?

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

上一页1下一页

    1. 存储
      1. 内存
        1. InMemory 服务注册表

这是一个内存服务管理工具,从通过 Spring Bean 连接的注册 bean 中播种。

1

2

3

4

5

6

7

8

9

10

11

12

@AutoConfigurationpublic class MyConfiguration {

  @Bean

  public List inMemoryRegisteredServices() {

      var services = new ArrayList<>();

      var service = new CasRegisteredService();

      ...

      services.add(service);

      return services;

  }}

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

假设已注册的服务作为 Spring bean 定义注入到上下文中,您将需要查阅项目的 javadocs 以了解有关 CAS 服务 API 的更多信息,以及如何将各种其他组件注入到服务定义中。

 警告

此组件不适合与服务管理 Web 应用程序一起使用,因为它不保留数据。另一方面,对于硬编码配置具有权威性且对于服务注册表数据来说足够好的部署,并且 UI 不会在仅存在少数与 CAS 集成的应用程序的情况下使用,这是完全可以接受的。

自动初始化

在启动和配置允许的情况下,注册表能够从 CAS 可用的默认 JSON 服务定义自动初始化自身。有关更多信息,请参阅本指南。

      1. JSON 格式
        1. JSON 服务注册中心

此注册表在应用程序上下文初始化时从 JSON 配置文件中读取服务定义。JSON 文件应在配置的目录位置中找到,此注册表将递归地查看目录结构以查找相关的 JSON 文件。

通过将以下模块添加到覆盖中来启用支持:

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-json-service-registry"

}

示例 JSON 文件如下:

1

2

3

4

5

6

7

{

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

  "serviceId" : "testId",

  "name" : "testJsonFile",

  "id" : 103935657744185,

  "evaluationOrder" : 10}

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

必填

自选

笔记

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

Show  entries

搜索:

·  cas.service-registry.json.location=

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

 org.apereo.cas.configuration.model.support.services.json.JsonServiceRegistryProperties.

如何配置此属性?

显示 1 到 1 的 1 个条目

上一页1下一页

 集群服务

您必须考虑到,如果您的 CAS 服务器部署是群集部署,则群集中的每个 CAS 节点都必须有权访问与其他节点相同的 JSON 配置文件集,或者您可能必须设计一种策略来使更改从一个节点同步到下一个节点。

JSON 服务注册表还能够自动检测对指定目录的更改。它将监控更改以识别文件的添加、删除和更新,并将自动刷新 CAS,以便更改会立即发生。

 转义字符

请确保 JSON blob 中的所有字段值都已正确转义,尤其是服务 ID 的字段值。如果将服务定义为正则表达式,则需要对某些正则表达式结构(如 . 和 \d)进行双重转义。

        1. 命名约定

建议新 JSON 文件的命名约定如下:

1

JSON fileName = serviceName + "-" + serviceNumericId + ".json"

根据上述公式,例如,上述 JSON 代码段应命名为:testJsonFile-103935657744185.json。请记住,由于文件是基于 serviceName 创建的,因此您需要确保不会将被视为对文件名无效的字符用作名称的一部分。此外,请注意,必须为 CAS 提供对包含服务定义文件的目录的完全读/写权限。

注册表能够根据服务类型将服务定义文件自动组织到专用目录中。如果 CAS 服务的基本服务目录中存在以下任何子目录,则 CAS 将按类型自动选择适当的目录:

服务类型

CAS Client、cas-client

OpenID 连接

OpenID Connect Relying Party openid-connect-relying-party

OAuth2

OAuth2 Client,oauth2-client

SAML2

SAML2 Service Provider saml2-service-provider

WS 联合身份验证

WS Federation Relying Party ws-federation-relying-party

如果未找到服务类型的子目录,则将使用基本服务目录。

 重复服务

当您向目录中添加更多文件时,您需要绝对确保没有两个服务定义具有相同的数字 ID。如果发生这种情况,加载一个定义将停止加载另一个定义。当任意选择服务 idscan 时,请确保所有服务数字标识符都是唯一的。如果发现重复数据,CAS 也会输出警告。

        1. JSON 语法

CAS 使用 JSON 语法的一个版本,该版本提供更宽松的语法,并能够指定注释。

评论

多行字符串

例如,给定的 JSON 文件可以在 CAS 中格式化为:

1

2

3

4

5

6

7

8

9

10

11

{

  /*

    Generic service definition that applies to https/imaps urls

    that wish to register with CAS for authentication.

  */

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

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

  "name" : "HTTPS and IMAPS",

  # "description": "This is commented out"

  "id" : 10000001,}

请注意末尾的尾部逗号。有关替代语法的更多信息,请参阅上面的链接。

        1. 集群和复制

如果 CAS 部署在集群中,则所有 CAS 节点的服务定义文件必须保持同步。请查看本指南以了解有关可用选项的更多信息。

您可能想知道:但是,将文件系统与 JSON(或 YAML)文件一起使用是 CAS 部署的好解决方案吗?

就像生活中的几乎所有其他事情一样,这要视情况而定。

如果您有单个 CAS 服务器,则使用 CAS Web 应用程序打包 JSON 文件很容易。您只需记住(这可能是缺点)每次添加、删除或更改任何文件时都要重新部署和重新构建 CAS。然后,你的构建变得不可变,这可能是一件好事,也可能不是一件好事。您也可以决定不使用 CAS Web 应用程序打包这些文件,而是将它们移动到外部的其他位置,从而无需重新构建。然后,您必须考虑该位置可能在哪里,应该为从中读取数据的进程授予什么权限等,以及源代码管理如何跟踪和管理该目录中文件的更改。

如果集群中有 N 个 CAS 服务器节点,则应考虑以下事项:

如果 JSON 文件与 CAS Web 应用程序一起打包,则必须重新构建并重新部署 CAS N 次。

如果 JSON 文件位于 CAS Web 应用程序之外,则需要确保群集中的 N 个 CAS 服务器可以访问同一共享位置,或者您可以查看此处概述的复制选项。在未绑定到 CAS 内部版本的外部位置管理文件可能会使您在源代码管理中跟踪此类更改变得困难。

您也可以决定不使用文件系统,而是选择适当的外部数据存储。然后,您当然可以消除有关重新构建和在 CAS 节点之间保持文件同步的问题,因为数据库必须集中并由所有节点共享。相反,您增加了管理、更新和维护单独数据库的额外开销,该数据库通常应该与 CAS 本身一样保持可用。

        1. 自动初始化

在启动和配置允许的情况下,注册表能够从 CAS 可用的默认 JSON 服务定义自动初始化自身。有关更多信息,请参阅本指南。

      1. YAML
        1. YAML 服务注册中心

此注册表在应用程序上下文初始化时从 YAML 配置文件中读取服务定义。YAML 文件应在配置的目录位置中找到,并且此注册表将递归地浏览目录结构以查找相关文件。

通过将以下模块添加到覆盖中来启用支持:

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-yaml-service-registry"}

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

必填

自选

笔记

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

Show  entries

搜索:

·  cas.service-registry.yaml.location=

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

 org.apereo.cas.configuration.model.support.services.yaml.YamlServiceRegistryProperties.

如何配置此属性?

显示 1 到 1 的 1 个条目

上一页1下一页

示例 YAML 文件如下:

1

2

3

4

5

6

7

8

9

--- !<org.apereo.cas.services.CasRegisteredService>serviceId: "testId"name: "YAML"id: 1000description: "description"attributeReleasePolicy: !<org.apereo.cas.services.ReturnAllAttributeReleasePolicy> {}accessStrategy: !<org.apereo.cas.services.DefaultRegisteredServiceAccessStrategy>

  enabled: true

  ssoEnabled: true

 YAML 验证

包含类名提示 (!<classname>) 的标签会导致许多 YAML 验证程序出现问题。如果您需要验证 YAML,请尝试删除这些标签以进行验证。请记住,如果您不包含属性的任何属性,则标记后可能需要一个空映射 ({})。

 集群服务

您必须考虑到,如果您的 CAS 服务器部署是群集的,则群集中的每个 CAS 节点都必须有权访问与另一个节点相同的配置文件集,或者您可能必须设计一种策略来使更改从一个节点同步到下一个节点。

服务注册表还能够自动检测对指定目录的更改。它将监控更改以识别文件的添加、删除和更新,并将自动刷新 CAS,以便更改会立即发生。

 转义字符

请确保 blob 中的所有字段值都已正确转义,尤其是服务 ID 的字段值。如果将服务定义为正则表达式,则需要对某些正则表达式结构(如 “.” 和 “\d”)进行双重转义。

        1. 命名约定

建议新文件的命名约定如下:

1

YAML fileName = serviceName + "-" + serviceNumericId + ".yml"

请记住,由于文件是基于 serviceName 创建的,因此您需要确保不会将被视为对文件名无效的字符用作名称的一部分。此外,请注意,必须为 CAS 提供对包含服务定义文件的目录的完全读/写权限。

注册表能够根据服务类型将服务定义文件自动组织到专用目录中。如果 CAS 服务的基本服务目录中存在以下任何子目录,CAS 将按类型自动选择适当的目录:

服务类型

CAS Client、cas-client

OpenID 连接

OpenID Connect Relying Party openid-connect-relying-party

OAuth2

OAuth2 Client,oauth2-client

SAML2

SAML2 Service Provider saml2-service-provider

WS 联合身份验证

WS Federation Relying Party ws-federation-relying-party

如果未找到服务类型的子目录,则将使用基本服务目录。

 重复服务

当您向目录中添加更多文件时,您需要绝对确保没有两个服务定义具有相同的数字 ID。如果发生这种情况,加载一个定义将停止加载另一个定义。当任意选择服务 idscan 时,请确保所有服务数字标识符都是唯一的。如果发现重复数据,CAS 也会输出警告。

        1. 复制

如果 CAS 部署在集群中,则所有 CAS 节点的服务定义文件必须保持同步。请查看本指南以了解有关可用选项的更多信息。

      1. Git
        1. Git 服务注册中心

此注册表从远程或本地 git 存储库读取服务定义。服务定义文件应为 JSON 或 YAML 文件。存储库的内容按定义的时间间隔拉取,对服务定义的更改被提交并推送到定义的远程。

通过将以下模块添加到覆盖中来启用支持:

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-git-service-registry"}

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

必填

自选

笔记

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

Show  entries

搜索:

·  cas.service-registry.git.active-branch=master

要签出和激活的分支默认为 master。

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

 org.apereo.cas.configuration.model.support.git.services.GitServiceRegistryProperties.

如何配置此属性?

·  cas.service-registry.git.branches-to-clone=*

如果要克隆存储库,这将允许获取分支的选定列表。列出以逗号分隔的分支名称,或使用 * 克隆所有分支。默认为所有分支。

 org.apereo.cas.configuration.model.support.git.services.GitServiceRegistryProperties.

如何配置此属性?

·  cas.service-registry.git.clone-directory.location=

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

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

如何配置此属性?

·  cas.service-registry.git.private-key.location=

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

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

如何配置此属性?

·  cas.service-registry.git.repository-url=

git 存储库的地址。可以是 URL 或文件系统路径。

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

 org.apereo.cas.configuration.model.support.git.services.GitServiceRegistryProperties.

如何配置此属性?

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

上一页1下一页

 无干扰!

请注意,不要手动修改在本地服务器上克隆的 git 存储库目录的状态。这样做可能会干扰 CAS 自己的服务管理流程,并最终可能破坏 git 存储库的状态。

服务注册表还能够自动检测更改,因为它会定期从定义的远程拉取更改。它将监控更改以识别文件的添加、删除和更新,并将自动刷新 CAS,以便更改可以立即发生。

        1. 故障排除

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

1

2

3

4

5

6

...<Logger name="org.eclipse.jgit" level="debug" additivity="false">

    <AppenderRef ref="casConsole"/>

    <AppenderRef ref="casFile"/></Logger>

...

      1. MongoDb 数据库
        1. Mongo 服务注册中心

此注册表使用 MongoDb 实例来加载和保留服务定义。通过将以下模块添加到覆盖中来启用支持:

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-mongo-service-registry"}

        1. 配置

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

必填

自选

笔记

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

Show  entries

搜索:

·  cas.service-registry.mongo.client-uri=

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

 org.apereo.cas.configuration.model.support.mongo.serviceregistry.MongoDbServiceRegistryProperties.

如何配置此属性?

·  cas.service-registry.mongo.collection=

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

 org.apereo.cas.configuration.model.support.mongo.serviceregistry.MongoDbServiceRegistryProperties.

如何配置此属性?

·  cas.service-registry.mongo.database-name=

MongoDb 数据库实例名称。

 org.apereo.cas.configuration.model.support.mongo.serviceregistry.MongoDbServiceRegistryProperties.

如何配置此属性?

·  cas.service-registry.mongo.host=localhost

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

 org.apereo.cas.configuration.model.support.mongo.serviceregistry.MongoDbServiceRegistryProperties.

如何配置此属性?

·  cas.service-registry.mongo.password=

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

 org.apereo.cas.configuration.model.support.mongo.serviceregistry.MongoDbServiceRegistryProperties.

如何配置此属性?

显示 1 到 5 的 7 个条目

上一页12下一页

        1. 自动初始化

在启动和配置允许的情况下,注册表能够从 CAS 可用的默认 JSON 服务定义自动初始化自身。有关更多信息,请参阅本指南。

      1. Google Cloud Firestore
        1. Google Cloud Firestore 服务注册表

Firestore 是一个 NoSQL 文档数据库,专为实现自动扩展、高性能和简化应用程序开发而构建。虽然 Firestore 接口具有许多与传统数据库相同的功能,但作为 NoSQL 数据库,它在描述数据对象之间关系的方式上与它们不同。

通过在覆盖中包含以下依赖项来启用支持:

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-gcp-firestore-service-registry"}

集成支持由 Spring Cloud GCP 项目提供支持。他们的参考文档提供了有关如何将 Google Cloud API 与 CAS 集成的详细信息。

请注意,CAS 将自动创建服务所需的适当集合。但是,高级使用案例的 TTL 过期策略和字段索引不是由 CAS 自动创建的,可能需要手动干预。

要了解如何设置应用程序默认凭证,请查看此页面。

        1. CAS 配置

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

必填

第三方

笔记

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

Show  entries

搜索:

·  cas.service-registry.google-cloud-firestore.collection=RegisteredServices

用于存储和获取已注册服务定义的数据库集合名称。

 org.apereo.cas.configuration.model.support.gcp.GoogleCloudFirestoreServiceRegistryProperties.

如何配置此属性?

显示 1 到 1 的 1 个条目

上一页1下一页

        1. 故障排除

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

1

2

3

4

5

6

...<Logger name="com.google.cloud" level="debug" additivity="false">

    <AppenderRef ref="casConsole"/>

    <AppenderRef ref="casFile"/></Logger>

...

      1. Google 云存储
        1. Google Cloud Storage Service 注册表

Google Cloud Storage 是一项用于存储非结构化数据的托管服务。CAS 利用 Google Cloud Storage 来存储服务和应用程序定义。应用程序根据类型进行分组,并存储在它们自己的存储桶中,这些存储桶是自动管理和/或创建的。

通过在覆盖中包含以下依赖项来启用支持:

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-gcp-storage-service-registry"}

集成支持由 Spring Cloud GCP 项目提供支持。他们的参考文档提供了有关如何将 Google Cloud API 与 CAS 集成的详细信息。

要了解如何设置应用程序默认凭证,请查看此页面。

        1. CAS 配置

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

第三方

笔记

下面列出的配置设置在 CAS 配置元数据中标记为 Third Party(第三方)。此标志表示配置设置不受 CAS 生态系统的控制、拥有或管理,并且会影响第三方库(如 Spring Boot 或 Spring Cloud to CAS)提供的功能。有关更多信息,您可能必须访问第三方来源以查找更多详细信息。

Show  entries

·  spring.cloud.gcp.storage.auto-create-files=

 com.google.cloud.spring.autoconfigure.storage.GcpStorageProperties.

如何配置此属性?

·  spring.cloud.gcp.storage.credentials.default-scopes=

 com.google.cloud.spring.core.Credentials.

如何配置此属性?

·  spring.cloud.gcp.storage.enabled=true

自动配置 Google Cloud Storage 组件。

如何配置此属性?

·  spring.cloud.gcp.storage.host=

格式为 'https://${service}.${universeDomain}/' 的 Storage 客户端的主机。

 com.google.cloud.spring.autoconfigure.storage.GcpStorageProperties.

如何配置此属性?

·  spring.cloud.gcp.storage.project-id=

 com.google.cloud.spring.autoconfigure.storage.GcpStorageProperties.

如何配置此属性?

搜索:

显示 1 到 5 的 6 个条目

上一页12下一页

        1. 故障排除

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

1

2

3

4

5

6

...<Logger name="com.google.cloud" level="debug" additivity="false">

    <AppenderRef ref="casConsole"/>

    <AppenderRef ref="casFile"/></Logger>

...

      1. LDAP 协议
        1. LDAP 服务注册表

服务注册表实现,将服务存储在 LDAP 目录中,并尝试将服务记录映射到 LDAP 条目,以便配置服务定义的检索、搜索和持久化设置。默认情况下,条目被分配 objectclass,即 casRegisteredService 属性,并由 uid 属性查找。

通过将以下模块添加到覆盖中来启用支持:

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-service-registry"}

        1. 配置

默认映射器支持以下可选项:

默认值

objectClass

casRegisteredService

serviceDefinitionAttribute

描述

idAttribute

uid

默认情况下,服务定义以 JSON 对象的形式存储在 serviceDefinitionAttribute 属性中。JSON 的格式和语法与JSON Service Registry 的格式和语法相同。就架构而言,就这些而言。

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

必填

自选

LDAP & Active Directory

笔记

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

Show  entries

搜索:

·  cas.service-registry.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.ldap.serviceregistry.LdapServiceRegistryProperties.

如何配置此属性?

·  cas.service-registry.ldap.bind-credential=

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

 org.apereo.cas.configuration.model.support.ldap.serviceregistry.LdapServiceRegistryProperties.

如何配置此属性?

·  cas.service-registry.ldap.bind-dn=

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

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

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

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

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

 org.apereo.cas.configuration.model.support.ldap.serviceregistry.LdapServiceRegistryProperties.

如何配置此属性?

·  cas.service-registry.ldap.ldap-url=

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

 org.apereo.cas.configuration.model.support.ldap.serviceregistry.LdapServiceRegistryProperties.

如何配置此属性?

·  cas.service-registry.ldap.search-filter=

你也可以提供一个外部的 groovy 脚本,语法为 file:/path/to/GroovyScript.groovy,以动态地完全构建最终的过滤器模板。

 org.apereo.cas.configuration.model.support.ldap.serviceregistry.LdapServiceRegistryProperties.

如何配置此属性?

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

上一页1下一页

        1. 自动初始化

在启动和配置允许的情况下,注册表能够从 CAS 可用的默认 JSON 服务定义自动初始化自身。有关更多信息,请参阅本指南。

      1. JPA
        1. JPA 服务注册中心

将已注册的服务数据存储在数据库中。

通过将以下模块添加到覆盖中来启用支持:

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-jpa-service-registry"}

要了解如何配置数据库驱动程序,请参阅本指南。

        1. 配置

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

必填

自选

Hibernate 和 JDBC

笔记

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

Show  entries

搜索:

·  cas.service-registry.jpa.driver-class=org.hsqldb.jdbcDriver

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

 org.apereo.cas.configuration.model.support.jpa.serviceregistry.JpaServiceRegistryProperties.

如何配置此属性?

·  cas.service-registry.jpa.enabled=true

是否启用通过 JPA 管理服务。

 org.apereo.cas.configuration.model.support.jpa.serviceregistry.JpaServiceRegistryProperties.

如何配置此属性?

·  cas.service-registry.jpa.password=

数据库连接密码。

 org.apereo.cas.configuration.model.support.jpa.serviceregistry.JpaServiceRegistryProperties.

如何配置此属性?

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

数据库连接 URL。

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

 org.apereo.cas.configuration.model.support.jpa.serviceregistry.JpaServiceRegistryProperties.

如何配置此属性?

·  cas.service-registry.jpa.user=sa

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

 org.apereo.cas.configuration.model.support.jpa.serviceregistry.JpaServiceRegistryProperties.

如何配置此属性?

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

上一页1下一页

        1. 自动初始化

在启动和配置允许的情况下,注册表能够从 CAS 可用的默认 JSON 服务定义自动初始化自身。有关更多信息,请参阅本指南。

      1. Redis
        1. Redis 服务注册中心

此服务注册表将票证存储在一个或多个 Redis 实例中。CAS 提供并使用 Redis 作为键/值存储,它接受 String 键和 CAS 服务定义对象作为值。键以 CAS_SERVICE: 开头。

Redis 服务注册表支持 Redis Sentinel,它为 Redis 提供了高可用性。实际上,这意味着使用 Sentinel,您可以创建一个 Redis 部署,无需人工干预即可抵御某些类型的故障。Redis Sentinel 还提供其他附带任务,例如监控、通知,并充当客户端的配置提供程序。

通过在覆盖中包含以下依赖项来启用支持:

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-service-registry"}

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

必填

自选

笔记

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

Show  entries

搜索:

·  cas.service-registry.redis.cluster.nodes[0].host=

服务器的主机地址。

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

如何配置此属性?

·  cas.service-registry.redis.cluster.nodes[0].port=

服务器的端口号。

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

如何配置此属性?

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

设置 master 节点的 id。

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

如何配置此属性?

·  cas.service-registry.redis.cluster.nodes[0].type=

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

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

如何配置此属性?

·  cas.service-registry.redis.cluster.password=

集群连接的密码。

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

如何配置此属性?

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

上一页123下一页

        1. 自动初始化

在启动和配置允许的情况下,注册表能够从 CAS 可用的默认 JSON 服务定义自动初始化自身。有关更多信息,请参阅本指南。

      1. DynamoDb
        1. DynamoDb 服务注册表

将已注册的服务数据存储在 DynamoDb 实例中。

通过将以下模块添加到覆盖中来启用支持:

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-dynamodb-service-registry"}

        1. 配置

您需要向 CAS 提供您的 AWS 凭证。此外,为了更好地了解 DynamoDb 的核心组件和概念,请先从本指南开始。

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

必填

自选

笔记

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

Show  entries

搜索:

·  cas.service-registry.dynamo-db.credential-access-key=

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

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

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

如何配置此属性?

·  cas.service-registry.dynamo-db.credential-secret-key=

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

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

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

如何配置此属性?

·  cas.service-registry.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.service-registry.dynamo-db.endpoint=

AWS 自定义终端节点。

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

如何配置此属性?

·  cas.service-registry.dynamo-db.region=

使用的 AWS 区域。

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

如何配置此属性?

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

上一页1下一页

        1. 故障排除

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

1

2

3

4

5

6

...<Logger name="com.amazonaws" level="debug" additivity="false">

    <AppenderRef ref="casConsole"/>

    <AppenderRef ref="casFile"/></Logger>

...

        1. 自动初始化

在启动和配置允许的情况下,注册表能够从 CAS 可用的默认 JSON 服务定义自动初始化自身。有关更多信息,请参阅本指南。

      1. 亚马逊 S3
        1. Amazon S3 服务注册表

将已注册的服务数据存储在 Amazon S3 存储桶中。每个服务定义都在其自己的单独存储桶中进行管理,服务定义的主体作为 JSON blob 进行管理,类似于 JSON 服务注册表。每个服务定义的存储桶名称都是根据服务数字标识符及其名称确定的,因此您必须确保服务定义在此类字段中没有重复值。

通过将以下模块添加到覆盖中来启用支持:

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-aws-s3-service-registry"}

        1. 配置

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

必填

自选

笔记

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

Show  entries

搜索:

·  cas.service-registry.amazon-s3.credential-access-key=

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

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

 org.apereo.cas.configuration.model.support.aws.AmazonS3ServiceRegistryProperties.

如何配置此属性?

·  cas.service-registry.amazon-s3.credential-secret-key=

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

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

 org.apereo.cas.configuration.model.support.aws.AmazonS3ServiceRegistryProperties.

如何配置此属性?

·  cas.service-registry.amazon-s3.endpoint=

AWS 自定义终端节点。

 org.apereo.cas.configuration.model.support.aws.AmazonS3ServiceRegistryProperties.

如何配置此属性?

·  cas.service-registry.amazon-s3.region=

使用的 AWS 区域。

 org.apereo.cas.configuration.model.support.aws.AmazonS3ServiceRegistryProperties.

如何配置此属性?

显示 1 到 4 的 4 个条目

上一页1下一页

        1. 故障排除

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

1

2

3

4

5

6

...<Logger name="com.amazonaws" level="debug" additivity="false">

    <AppenderRef ref="casConsole"/>

    <AppenderRef ref="casFile"/></Logger>

...

        1. 自动初始化

在启动和配置允许的情况下,注册表能够从 CAS 可用的默认 JSON 服务定义自动初始化自身。有关更多信息,请参阅本指南。

      1. Cassandra
        1. Cassandra 服务注册表

将已注册的服务数据存储在 Apache Cassandra 实例中。服务应在默认写入一致性为 LOCAL_QUORUM 且读取一致性为 ONE) 的 casservices 表中查找/存储。

通过将以下模块添加到覆盖中来启用支持:

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-cassandra-service-registry"}

        1. 配置

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

必填

自选

笔记

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

Show  entries

搜索:

·  cas.service-registry.cassandra.contact-points=

用于新集群的联系点列表。每个联系点都应使用语法 address:port 进行定义。

 org.apereo.cas.configuration.model.support.cassandra.serviceregistry.CassandraServiceRegistryProperties.

如何配置此属性?

·  cas.service-registry.cassandra.keyspace=

Keyspace 地址来使用集群将连接的位置。

 org.apereo.cas.configuration.model.support.cassandra.serviceregistry.CassandraServiceRegistryProperties.

如何配置此属性?

·  cas.service-registry.cassandra.password=

用于绑定和建立与 Cassandra 连接的密码。

 org.apereo.cas.configuration.model.support.cassandra.serviceregistry.CassandraServiceRegistryProperties.

如何配置此属性?

·  cas.service-registry.cassandra.username=

用于绑定并建立与 Cassandra 连接的用户名。

 org.apereo.cas.configuration.model.support.cassandra.serviceregistry.CassandraServiceRegistryProperties.

如何配置此属性?

显示 1 到 4 的 4 个条目

上一页1下一页

        1. 故障排除

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

1

2

3

4

5

6

...<Logger name="com.datastax.driver" level="debug" additivity="false">

    <AppenderRef ref="casConsole"/>

    <AppenderRef ref="casFile"/></Logger>

...

        1. 自动初始化

在启动和配置允许的情况下,注册表能够从 CAS 可用的默认 JSON 服务定义自动初始化自身。有关更多信息,请参阅本指南。

      1. CosmosDb 数据库
        1. CosmosDb 服务注册表

将已注册的服务数据存储在 Azure CosmosDb 实例中。

通过将以下模块添加到覆盖中来启用支持:

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-cosmosdb-service-registry"}

        1. 配置

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

必填

自选

笔记

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

Show  entries

搜索:

·  cas.service-registry.cosmos-db.container=CasCosmosDbServiceRegistry

用于存储 CAS 服务定义的集合。

 org.apereo.cas.configuration.model.support.cosmosdb.CosmosDbServiceRegistryProperties.

如何配置此属性?

·  cas.service-registry.cosmos-db.database=

数据库名称。

 org.apereo.cas.configuration.model.support.cosmosdb.CosmosDbServiceRegistryProperties.

如何配置此属性?

·  cas.service-registry.cosmos-db.key=

文档数据库主密钥。

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

 org.apereo.cas.configuration.model.support.cosmosdb.CosmosDbServiceRegistryProperties.

如何配置此属性?

·  cas.service-registry.cosmos-db.uri=

记录 Db 主机地址(即 https://localhost:8081)。

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

 org.apereo.cas.configuration.model.support.cosmosdb.CosmosDbServiceRegistryProperties.

如何配置此属性?

显示 1 到 4 的 4 个条目

上一页1下一页

        1. 故障排除

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

1

2

3

4

<Logger name="com.azure.cosmos" level="debug" additivity="false">

    <AppenderRef ref="casConsole"/>

    <AppenderRef ref="casFile"/></Logger>

        1. 自动初始化

在启动和配置允许的情况下,注册表能够从 CAS 可用的默认 JSON 服务定义自动初始化自身。有关更多信息,请参阅本指南。

      1. REST
        1. RESTful 服务注册中心

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-rest-service-registry"}

        1. 配置

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

必填

自选

笔记

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

Show  entries

搜索:

·  cas.service-registry.rest.url=

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

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

 org.apereo.cas.configuration.model.core.services.RestfulServiceRegistryProperties.

如何配置此属性?

显示 1 到 1 的 1 个条目

上一页1下一页

操作

方法

身体

响应

POST

RegisteredService 对象

RegisteredService 对象

删除

DELETE

作为路径变量附加到终端节点 URL 的服务数字 ID

没有

负荷

GET

没有

RegisteredService 对象的集合。

查找按 Id

GET

作为路径变量附加到终端节点 URL 的服务数字 ID

RegisteredService 对象

查找按 Id

GET

作为路径变量附加到终端节点 URL 的服务 URL

RegisteredService 对象

所有操作都应返回 200 状态代码。所有其他响应状态代码将强制 CAS 将请求的操作视为无效。

返回 JSON 负载的操作必须设计为包含有关已注册服务的足够类型信息。例如,使用 GET 加载并返回服务集合时,预期有效负载应与以下结构匹配:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

[

  "java.util.ArrayList",

  [

    {

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

      "serviceId": "^https://github.com/apereo/cas",

      "name": "CAS-GitHub",

      "id": 1

    },

    {

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

      "serviceId": "^https://apereo.github.io",

      "name": "CAS-Blog",

      "id": 2

    }

  ]]

        1. 自动初始化

在启动和配置允许的情况下,注册表能够从 CAS 可用的默认 JSON 服务定义自动初始化自身。有关更多信息,请参阅本指南。

      1. 自定义
        1. 自定义服务注册表

如果您希望设计自己的服务注册中心实现,则需要将实现注入 CAS 中,如下所示:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

package org.apereo.cas.support;

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

  @Bean

  @RefreshScope(proxyMode = ScopedProxyMode.DEFAULT)

  public ServiceRegistryDao serviceRegistry() {

      ...

  }

  

  @Override

  public void configureServiceRegistry(final ServiceRegistryExecutionPlan plan) {

    plan.registerServiceRegistry(serviceRegistry());

  }}

您的覆盖至少需要包含以下模块:

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-core-services"}

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


文章转载自:

http://k1YmCMim.spLkk.cn
http://BHrRfGgr.spLkk.cn
http://2aAPXH2y.spLkk.cn
http://wMktqkfd.spLkk.cn
http://5hZFTX94.spLkk.cn
http://Mb8rTIwR.spLkk.cn
http://L6RO8N0Z.spLkk.cn
http://vMUJyANw.spLkk.cn
http://q0ZpCqg8.spLkk.cn
http://o34NBDgL.spLkk.cn
http://MmHkdL8F.spLkk.cn
http://QJHjYR1m.spLkk.cn
http://nmaB2Rhd.spLkk.cn
http://Wsk45Xe5.spLkk.cn
http://Z9l3KH39.spLkk.cn
http://jyLeFBmQ.spLkk.cn
http://6hQgqw8O.spLkk.cn
http://YNpZPY4X.spLkk.cn
http://ZLmL3jVw.spLkk.cn
http://Tq8xnzNh.spLkk.cn
http://nB1hT9qy.spLkk.cn
http://xkVKhKok.spLkk.cn
http://hW0rd92T.spLkk.cn
http://NGhZ8Ovc.spLkk.cn
http://GCvWl7jy.spLkk.cn
http://PXxUdXiT.spLkk.cn
http://wEoNIckP.spLkk.cn
http://7g8D2DXt.spLkk.cn
http://J0kLPH5x.spLkk.cn
http://K2O3ozbs.spLkk.cn
http://www.dtcms.com/wzjs/689873.html

相关文章:

  • 中国做网站公司排名如何做网站推广 求指点
  • 军博网站建设公司东莞网站建设seo推广
  • seo文章优化技巧只有单页面的网站怎么做seo
  • 红色企业网站源码云服务器费用
  • 重庆企业网站seowordpress评论提交特效
  • 天津建网站的公司网站备案证书放到哪里
  • 应城网站建设40个界面ui外包多少钱
  • 机械网站建设比较好的淘宝官网电脑版
  • 网站制作技术培训学校公益 建网站
  • 滨州制作网站网络推广引流有哪些渠道
  • 简单的网站建设公司设计公司网站建设文案
  • 宁波自助建站网站2023年中国企业500强
  • 快速网站建设公司凯里有哪些网站开发公司
  • 网站做多个页面网页设计与制作代码
  • 品牌运营总监上海优化网站排名
  • wordpress链接翻译滨州网站seo
  • 杭州 做网站公司网站建设费属于什么费用
  • 合肥网站建设新闻营销有赞短网址生成
  • 成都网站seo排名优化做网站用什么程序
  • 长沙做网站竞网衡阳网站建设价格
  • 百度推广建设网站是干什么了wordpress 截取中文
  • 中小型网站开发seo薪酬如何
  • 做国际贸易的有哪有个网站网站建设公司咨
  • 优秀手机网站设计途牛电子商务网站建设
  • 云梦网站建设国外免费源码网站
  • 如何破解网站管理员登陆密码可以建微信网站的
  • 北京网站手机站建设公司个人网页设计模板教程
  • 代做网站排名2021年有没有人给个网站
  • 金华高端网站建设公司定州国际陆港项目
  • 网站添加合适图片网络推广服务协议