我如何在不同的CAS服务上共享身份验证/ SSO?

时间:2019-05-14 21:03:48

标签: cas

我有2个CAS服务(CAS 6.0.3)(通过JSON)注册了不同的serviceIds和AuthenticationHandlers,依此类推。我可以分别分别对两个服务进行身份验证(例如cas / login?service = http ... service1)。但是,当我再次验证其他服务后尝试访问第二个服务(cas / login?service = http ... service2)时,出现此错误消息:

机票...与提供的服务不匹配。原始服务是...,提供的服务是...

信息:所有“ ...”匹配项/都是相同的服务ID字符串。错误消息的内部代码为“ INVALID_SERVICE”

CAS认为“好的,您已经登录,我可以直接将您重定向到您的服务”。它甚至使SessionToken进行验证,然后重定向。但是,当第二个服务验证票证时,错误消息就会消失。

是否有可能允许Service1和Service2在登录Service1后使用相同的“ SSO上下文” / CAS会话/允许登录service2? 我可以在我的service-JSON配置中使用该主题的RegisteredServiceProperty吗?

我已经阅读了以下所有内容:https://apereo.github.io/cas/6.0.x/index.html,甚至尝试在源代码中搜索此类验证选项。

以下是我的日志中启用了“跟踪”级别的最后几行:

=============================================================
WHO: myuser
WHAT: ST-2-tNnqqJfwFeSSAqaQf-LBTF7AvsMLAPTOP-3DHMD58D
ACTION: SERVICE_TICKET_VALIDATE_SUCCESS
APPLICATION: CAS
WHEN: Wed May 15 11:02:14 CEST 2019
CLIENT IP ADDRESS: 127.0.0.1
SERVER IP ADDRESS: 127.0.0.1
=============================================================


2019-05-15 11:02:14,965 TRACE [org.apereo.cas.validation.AbstractCasProtocolValidationSpecification] - <Is validation specification set to enforce [renew] protocol behavior? [no]. Is assertion issued from a new login? [no]>
2019-05-15 11:02:14,965 TRACE [org.apereo.cas.validation.Cas20WithoutProxyingValidationSpecification] - <Number of chained authentications in the assertion [1]>
2019-05-15 11:02:14,965 TRACE [org.apereo.cas.validation.AbstractCasProtocolValidationSpecification] - <Validation specification is satisfied by the produced assertion>
2019-05-15 11:02:14,965 TRACE [org.apereo.cas.services.AbstractServicesManager] - <No environments are assigned to service [myservice]>
2019-05-15 11:02:14,965 DEBUG [org.apereo.cas.validation.RegisteredServiceRequiredHandlersServiceTicketValidationAuthorizer] - <Evaluating service [AbstractWebApplicationService(id=https://blub.blub, originalUrl=https://blub.blub, artifactId=ST-2-tNnqqJfwFeSSAqaQf-LBTF7AvsMLAPTOP-3DHMD58D, principal=null, source=service, loggedOutAlready=false, format=XML, attributes={})] to ensure required authentication handlers can satisfy assertion>
2019-05-15 11:02:14,965 TRACE [org.apereo.cas.util.CollectionUtils] - <Converting multi-valued element [[MailboxAuthenticationHandler]]>
2019-05-15 11:02:14,966 TRACE [org.apereo.cas.web.view.CasReloadableMessageBundle] - <Examining language bundle [classpath:custom_messages_de] for the code [INVALID_SERVICE]>
2019-05-15 11:02:14,966 TRACE [org.apereo.cas.web.view.CasReloadableMessageBundle] - <Examining language bundle [classpath:messages_de] for the code [INVALID_SERVICE]>

验证响应为:(错误消息为德语,但相同/“ INVALID_SERVICE”-错误):

<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>
    <cas:authenticationFailure code="INVALID_SERVICE">Ticket &#39;ST-2-tNnqqJfwFeSSAqaQf-LBTF7AvsMLAPTOP-3DHMD58D&#39; passt nicht zum angegebenen Service. Der urspr&amp;uuml;ngliche Service war &#39;https://blub.blub&#39; und der &amp;uuml;bermittelte Service war &#39;https://blub.blub&#39;.</cas:authenticationFailure>
</cas:serviceResponse>

1 个答案:

答案 0 :(得分:0)

我发现了这种(错误)行为的原因。 似乎即使这些自定义处理程序内部具有相同的代码/属性,也无法在不同的服务上使用不同的AuthenticationHandler。

在这种情况下,或者如果在文档中有记录的地方,“ CAS”显示更精确的错误消息(在日志中),将是非常不错的。