如有疑问,请看视频:CAS单点登录(第7版)
CAS 能够暂停和中断身份验证流程以访问外部服务和资源,查询状态和设置,然后指示 CAS 应如何管理和控制 SSO 会话。中断服务能够向用户显示通知消息,提供重定向到外部服务的选项等。一个常见的使用案例涉及在身份验证流程期间显示公告板,以向选定的用户显示消息和公告,然后选择性地要求受众完成特定任务,然后 CAS 能够接受身份验证请求并建立会话。
在中断流中,CAS 目前不会返回到充当中断服务的外部资源,以存储、跟踪或记住用户的决策。换句话说,我们只处理 R(即。Read) 的 CRUD 中。今天的功能仅在只读模式下处理查询状态和读取结果。中断服务本身是必需的,并且鼓励将受众重定向到外部资源,其中执行操作会重置中断状态,从而释放 CAS 以稍后继续进行,而无需再次中断身份验证流。
配置
通过在WAR覆盖中包含以下依赖项来启用支持:
阿帕奇Maven
学位
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-interrupt-webflow"} |
以下设置和属性可从CAS配置曲库获得:
可选
笔记
下面列出的配置设置在CAS配置元数据中被标记为可选。该标志表示在最终用户CAS配置中不需要立即存在该设置,因为分配了默认值或功能的激活不受设置值的有条件控制。换句话说,如果您需要修改默认值或如果您需要打开由设置控制的功能,您应该只在您的配置中包含此字段。
Show entries
搜索:
· cas.interrupt.core.force-execution=false 是否应始终强制执行中断查询查询,并且应忽略中断检查的状态。这是一个全局设置,可以选择为每个应用程序策略否决。 org.apereo.cas.configuration.model.support.interrupt.InterruptCoreProperties. 如何配置此属性? |
· cas.interrupt.core.trigger-mode=AFTER_AUTHENTICATION 定义在身份验证流程中应如何触发中断通知。可用值如下: AFTER_AUTHENTICATION:触发中断通知和查询身份验证事件,并预先登录。 AFTER_SSO:单点登录后触发中断通知和查询。单点登录后执行的中断查询不能有条件地控制SSO会话的创建。 org.apereo.cas.configuration.model.support.interrupt.InterruptCoreProperties. 如何配置此属性? |
显示2个条目中的1到2个
上一个1下一个
最终传递到 CAS 用户界面的中断响应有效载荷由下面描述的中断策略生成。无论生产者策略如何,有效负载结构都由以下 JSON 中断策略显示。
请参阅本指南以了解更多信息。
可以通过以下方式执行中断查询:
存储 | 描述 |
JSON 格式 | 请参阅本指南。 |
Regex 属性 | 请参阅本指南。 |
Groovy | 请参阅本指南。 |
REST | 请参阅本指南。 |
自定义 | 请参阅本指南。 |
中断查询的执行将作为专用 CAS cookie 和 specificauthentication 属性进行跟踪和记住。查询触发器的计算将考虑这两个选项,具体取决于 interrupt 是设置为在身份验证后触发还是单点登录。
默认跟踪机制还能够检测和拾取先前中断响应的变化,并在必要时重新中断用户。例如,如果用户被中断了一次,并且底层 dataand 中断负载自上次通知以来发生了变化,则 CAS 可能会再次中断用户流以处理最新版本的中断负载。
CAS 配置目录中提供了以下设置和属性:
必填
自选
签名和加密
笔记
下面列出的配置设置在 CAS 配置元数据中标记为 Required。此标志表示可能需要该设置的存在才能激活或影响 CAS 功能的行为,并且通常应进行审查、可能拥有和调整。如果为该设置分配了默认值,则无需严格将该设置放在配置副本中,但仍应对其进行检查以确保它符合您的部署预期。
Show entries
搜索:
· cas.interrupt.cookie.crypto.encryption.key= 加密密钥是一个 JWT,其长度由加密密钥大小设置定义。 此设置支持 Spring 表达式语言。 org.apereo.cas.configuration.model.core.util.EncryptionJwtCryptoProperties. 如何配置此属性? |
· cas.interrupt.cookie.crypto.signing.key= 签名密钥是一个 JWT,其长度由签名密钥大小设置定义。 此设置支持 Spring 表达式语言。 org.apereo.cas.configuration.model.core.util.SigningJwtCryptoProperties. 如何配置此属性? |
显示 1 到 2 的 2 个条目
上一页1下一页
如果你想设计自己的中断跟踪机制,你可以插入 InterruptTrackingEngine 的自定义实现,它允许你自己处理这个问题:
1 2 3 4 | @Beanpublic InterruptTrackingEngine interruptTrackingEngine() { return new MyInterruptTrackingEngine();} |
请参阅本指南,了解有关如何将配置注册到 CAS 运行时的更多信息。
可以为应用程序定义分配一个专用的 webflow 中断策略。示例 JSON 文件如下:
1 2 3 4 5 6 7 8 9 10 11 | { "@class" : "org.apereo.cas.services.CasRegisteredService", "serviceId" : "^https://.+", "name" : "sample service", "id" : 100, "webflowInterruptPolicy" : { "@class" : "org.apereo.cas.services.DefaultRegisteredServiceWebflowInterruptPolicy", "enabled": true, "forceExecution": "TRUE" }} |
协议支持
身份验证中断应适用于 CAS 支持的所有客户端应用程序类型,而不管身份验证协议如何。无论您的应用程序使用 CAS、SAML2、OpenID Connect 等,中断策略都应该同样适用,并且它在应用程序定义中的配置方法保持不变。
支持以下策略设置:
田 | 描述 |
enabled | 是否为此应用程序启用中断通知。默认值为 true。 |
forceExecution | 无论如何,是否仍应继续执行。接受的值为 TRUEFALSE 或 UNDEFINED。 |
下面列出了其他中断触发器。
PRINCIPAL 属性
GROOVY 脚本
可以根据 principal 属性触发每个应用程序的中断触发器。如果定义的属性 name存在,并且可以产生与定义的属性值匹配的值,则可能会触发 interrupt。
田 | 描述 |
attributeName | 用于与身份验证和主体属性名称进行比较的正则表达式模式以触发中断。 |
attributeValue | 用于与身份验证进行比较的正则表达式模式,以及用于触发中断的 principal 属性值。 |
应用程序定义可以定义为:
1 2 3 4 5 6 7 8 9 10 11 | { "@class" : "org.apereo.cas.services.CasRegisteredService", "serviceId" : "^https://.+", "name" : "sample service", "id" : 100, "webflowInterruptPolicy" : { "@class" : "org.apereo.cas.services.DefaultRegisteredServiceWebflowInterruptPolicy", "attributeName": "mem...of", "attributeValue": "^st[a-z]ff$" }} |
这些字段支持 Spring 表达式语言语法。
身份验证中断和通知使用以下策略之一在整个流程中执行。触发器策略是通过 CAS 设置全局定义的。
身份验证后
单点登录后
这是默认策略,允许中断查询在主身份验证事件之后和单点登录事件之前执行。这意味着 CAS 已识别经过身份验证的用户,并通过扩展对中断可用,并且中断能够决定是否可以为该用户建立单点登录会话。
我们可以 SSO 到 Links 吗?
不。links集合只是链接,与 CAS 身份验证序列没有任何关联,这意味着它们不会激活该序列中的状态、转换或视图来触发 CAS 生成票证、执行某些操作等。这个集合中的任何链接都是这样的;只是一个链接。如果链接指向与 CAS 集成的应用程序,则通过该链接访问这些应用程序将再次提示用户输入凭据,尤其是在尚未建立单点登录的情况下。请记住,中断通知通常在身份验证步骤之后和创建任何单点登录会话之前执行。
请注意,在撰写本文时,中断触发模式是全局的,不能基于每个应用程序进行控制或定义。身份验证中断工作流的构造在初始化时烧录到 CAS webflow 中,并且在运行时不可更改,具体取决于应用程序或用户。
CAS 配置目录中提供了以下设置和属性:
必填
笔记
下面列出的配置设置在 CAS 配置元数据中标记为 Required。此标志表示可能需要该设置的存在才能激活或影响 CAS 功能的行为,并且通常应进行审查、可能拥有和调整。如果为该设置分配了默认值,则无需严格将该设置放在配置副本中,但仍应对其进行检查以确保它符合您的部署预期。
Show entries
搜索:
· cas.interrupt.json.location= 在 CAS 能够自动监视底层资源的更改并动态检测更新和修改的情况和场景中,您可以将以下设置指定为环境变量或系统属性,其值为 false,以禁用资源观察程序:org.apereo.cas.util.io.PathWatcherService。 org.apereo.cas.configuration.model.support.interrupt.JsonInterruptProperties. 如何配置此属性? |
显示 1 到 1 的 1 个条目
上一页1下一页
此策略访问静态 JSON 资源,该资源包含链接到各种中断策略的用户名映射。此选项在开发、测试和演示期间最有用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | { "casuser" : { "message" : "Announcement message <strong>goes here</strong>.", "messageCode" : "interrupt.message.body", "links" : { "Go to Location1" : "https://www.location1.com", "Go to Location2" : "https://www.location2.com" }, "block" : false, "ssoEnabled" : false, "interrupt" : true, "autoRedirect" : false, "autoRedirectAfterSeconds" : -1, "data" : { "field1" : [ "value1", "value2" ], "field2" : [ "value3", "value4" ] } }} |
-
-
-
- 中断负载
-
-
每个中断策略最终的任务是生成包含以下设置的响应:
田 | 描述 |
message | 要在屏幕上显示的公告消息。 |
links | 要在屏幕上显示的链接映射,其中 key 是链接文本,value 是目标。 |
interrupt | true/false 指示 CAS 是否应中断身份验证流。 |
block | true/false 指示 CAS 是否应完全阻止身份验证流。 |
ssoEnabled | true/false 指示 CAS 是否应允许身份验证但不建立 SSO。 |
autoRedirect | true/false 来指示 CAS 是否应自动重定向到提供的第一个链接。 |
autoRedirectAfterSeconds | 指示 CAS 是否应在配置的秒数后自动重定向。默认值为 -1,这意味着不应执行延迟重定向功能。 |
此策略允许在 CAS 设置中定义正则表达式模式,这些模式将与属性名称和值匹配。如果在 CAS 检查身份验证和主体属性的集合时生成了成功的匹配项,则身份验证流将中断。
CAS 配置目录中提供了以下设置和属性:
必填
笔记
下面列出的配置设置在 CAS 配置元数据中标记为 Required。此标志表示可能需要该设置的存在才能激活或影响 CAS 功能的行为,并且通常应进行审查、可能拥有和调整。如果为该设置分配了默认值,则无需严格将该设置放在配置副本中,但仍应对其进行检查以确保它符合您的部署预期。
Show entries
搜索:
· cas.interrupt.regex.attribute-name= 属性名称上的正则表达式模式,如果匹配,将成功完成中断通知触发器的第一个条件。 此设置支持正则表达式模式。[?]. org.apereo.cas.configuration.model.support.interrupt.RegexInterruptProperties. 如何配置此属性? |
· cas.interrupt.regex.attribute-value= 属性值上的正则表达式模式,如果匹配,将成功完成中断通知触发器的第一个条件。 此设置支持正则表达式模式。[?]. org.apereo.cas.configuration.model.support.interrupt.RegexInterruptProperties. 如何配置此属性? |
显示 1 到 2 的 2 个条目
上一页1下一页
此策略与 Groovy 资源相联系,其工作是在给定提供的用户名和一定数量的其他参数的情况下动态计算是否应中断身份验证流。
该脚本可以定义为:
1 2 3 4 5 6 7 8 9 10 | import org.apereo.cas.interrupt.InterruptResponse def run(final Object... args) { def (principal,attributes,service,registeredService,requestContext,logger) = args ... def block = false def ssoEnabled = true return new InterruptResponse("Message", [link1:"google.com", link2:"yahoo.com"], block, ssoEnabled)} |
CAS 配置目录中提供了以下设置和属性:
必填
Groovy 脚本
笔记
下面列出的配置设置在 CAS 配置元数据中标记为 Required。此标志表示可能需要该设置的存在才能激活或影响 CAS 功能的行为,并且通常应进行审查、可能拥有和调整。如果为该设置分配了默认值,则无需严格将该设置放在配置副本中,但仍应对其进行检查以确保它符合您的部署预期。
Show entries
搜索:
· cas.interrupt.groovy.location= 在 CAS 能够自动监视底层资源的更改并动态检测更新和修改的情况和场景中,您可以将以下设置指定为环境变量或系统属性,其值为 false,以禁用资源观察程序:org.apereo.cas.util.io.PathWatcherService。 org.apereo.cas.configuration.model.support.interrupt.GroovyInterruptProperties. 如何配置此属性? |
显示 1 到 1 的 1 个条目
上一页1下一页
以下参数将传递给脚本:
参数 | 描述 |
principal | 已验证的主体。 |
attributes | MapMap<String, Object> 类型的映射,同时包含 principal 和 authentication 属性。 |
service | 表示请求应用程序的 Service 对象。 |
registeredService | 表示注册表中的服务定义的 RegisteredService 对象。 |
requestContext | 表示 Spring Webflow RequestContext 的对象。 |
logger | 负责发出日志消息的对象,例如 logger.info(...) |
要准备 CAS 以支持 Apache Groovy 并与之集成,请查看本指南。
此策略伸向 REST 端点资源,其工作是在给定以下参数的情况下动态计算是否应中断身份验证流程:
参数 | 描述 |
username | 经过身份验证的主体 ID。 |
service | 请求应用程序的标识符 (URL)。 |
registeredService | 已注册服务的标识符匹配并在注册表中找到。 |
在状态代码为 200 的成功操作中,响应正文应包含 JSON 有效负载,其语法和结构与上述内容相同。
CAS 配置目录中提供了以下设置和属性:
必填
自选
笔记
下面列出的配置设置在 CAS 配置元数据中标记为 Required。此标志表示可能需要该设置的存在才能激活或影响 CAS 功能的行为,并且通常应进行审查、可能拥有和调整。如果为该设置分配了默认值,则无需严格将该设置放在配置副本中,但仍应对其进行检查以确保它符合您的部署预期。
Show entries
搜索:
· cas.interrupt.rest.url= 用于联系和检索属性的终端节点 URL。 此设置支持 Spring 表达式语言。 org.apereo.cas.configuration.model.support.interrupt.RestfulInterruptProperties. 如何配置此属性? |
显示 1 到 1 的 1 个条目
上一页1下一页
如果你希望设计自己的 interrupt 策略来进行查询,你可以设计你的组件来做出决定:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | @AutoConfiguration@EnableConfigurationProperties(CasConfigurationProperties.class)public class MyInterruptConfiguration { @Bean public InterruptInquirer myInterruptInquirer() { ... } @Bean public InterruptInquiryExecutionPlanConfigurer myInterruptInquiryExecutionPlanConfigurer( @Qualifier("myInterruptInquirer") InterruptInquirer myInterruptInquirer) { return plan -> { plan.registerInterruptInquirer(myInterruptInquirer); }; }} |
请参阅本指南,了解有关如何将配置注册到 CAS 运行时的更多信息。