CAS 5.2.3 "500:Internal Server Error" with Groovy

270 views
Skip to first unread message

brian mancuso

unread,
Feb 9, 2018, 9:27:41 AM2/9/18
to CAS Community
Hey all,

I was originally trying to setup some custom triggers to determine who should use MFA and who is allowed to bypass. I have since been directed towards Groovy to simplify things, but I'm still having some trouble.

At this point, the Groovy script's purpose is strictly to test if a certain user will bypass MFA while others will not. Here's my setup:

/etc/cas/config/cas.properties

##
# Duo security 2fa authentication provider
# https://www.duosecurity.com/docs/duoweb#1.-generate-an-akey
#
cas
.authn.mfa.duo[0].rank=0
cas
.authn.mfa.duo[0].duoApiHost=REMOVED
cas
.authn.mfa.duo[0].duoIntegrationKey=REMOVED
cas
.authn.mfa.duo[0].duoSecretKey=REMOVED
cas
.authn.mfa.duo[0].duoApplicationKey=REMOVED
cas
.authn.mfa.duo[0].id=mfa-duo
cas
.authn.mfa.globalProviderId=mfa-duo
cas
.authn.mfa.globalFailureMode=OPEN
cas
.authn.mfa.duo[0].bypass.type=GROOVY
cas
.authn.mfa.duo[0].bypass.groovy.location=file:///etc/cas/selectiveDuo.groovy


/etc/cas/selectiveDuo.groovy

def boolean run(final Object... args) {
   
def authentication = args[0]
   
def principal = args[1]
   
def service = args[2]
   
def provider = args[3]
   
def logger = args[4]
   
def httpRequest = args[5]
   
    logger
.info("Evaluating principal attributes ${principal.attributes}")

   
def bypass = principal.attributes['uid']
   
if ((bypass.contains("testuser") && provider.id == "mfa-duo") {
        logger
.info("Skipping bypass for principal ${principal.id}")
       
return false
   
}

   
return true
}


When I try to login though, whenever a user would be sent to DUO, I get a 500 error:


Here's a small snippet from the output:

2018-02-09 09:04:05,717 DEBUG [org.apereo.cas.web.FlowExecutionExceptionResolver] - <Ignoring the received exception due to a type mismatch>
org.springframework.webflow.execution.FlowExecutionException: Exception thrown in state 'viewLoginFormDuo' of flow 'mfa-duo'
at org.springframework.webflow.engine.impl.FlowExecutionImpl.wrap(FlowExecutionImpl.java:573) ~[spring-webflow-2.4.6.RELEASE.jar:2.4.6.RELEASE]
at org.springframework.webflow.engine.impl.FlowExecutionImpl.resume(FlowExecutionImpl.java:263) ~[spring-webflow-2.4.6.RELEASE.jar:2.4.6.RELEASE]
at org.springframework.webflow.executor.FlowExecutorImpl.resumeExecution(FlowExecutorImpl.java:169) ~[spring-webflow-2.4.6.RELEASE.jar:2.4.6.RELEASE]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_151]

Caused by: org.apereo.spring.webflow.plugin.ClientFlowExecutionRepositoryException: Error encoding flow execution
at org.apereo.spring.webflow.plugin.ClientFlowExecutionRepository.getKey(ClientFlowExecutionRepository.java:114) ~[spring-webflow-client-repo-1.0.3.jar:1.0.3]
at org.springframework.webflow.engine.impl.FlowExecutionImpl.assignKey(FlowExecutionImpl.java:419) ~[spring-webflow-2.4.6.RELEASE.jar:2.4.6.RELEASE]
at org.springframework.webflow.engine.impl.RequestControlContextImpl.assignFlowExecutionKey(RequestControlContextImpl.java:193) ~[spring-webflow-2.4.6.RELEASE.jar:2.4.6.RELEASE]

Caused by: java.io.NotSerializableException: org.springframework.core.io.UrlResource
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184) ~[?:1.8.0_151]
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) ~[?:1.8.0_151]
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509) ~[?:1.8.0_151]
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) ~[?:1.8.0_151]
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) ~[?:1.8.0_151]
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) ~[?:1.8.0_151]
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509) ~[?:1.8.0_151]

2018-02-09 09:04:05,717 ERROR [org.springframework.boot.web.support.ErrorPageFilter] - <Forwarding to error page from request [/login] due to exception [Exception thrown in state 'viewLoginFormDuo' of flow 'mfa-duo']>
org.springframework.webflow.execution.FlowExecutionException: Exception thrown in state 'viewLoginFormDuo' of flow 'mfa-duo'
at org.springframework.webflow.engine.impl.FlowExecutionImpl.wrap(FlowExecutionImpl.java:573) ~[spring-webflow-2.4.6.RELEASE.jar:2.4.6.RELEASE]
at org.springframework.webflow.engine.impl.FlowExecutionImpl.resume(FlowExecutionImpl.java:263) ~[spring-webflow-2.4.6.RELEASE.jar:2.4.6.RELEASE]
at org.springframework.webflow.executor.FlowExecutorImpl.resumeExecution(FlowExecutorImpl.java:169) ~[spring-webflow-2.4.6.RELEASE.jar:2.4.6.RELEASE]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_151]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_151]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_151]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_151]

Caused by: org.apereo.spring.webflow.plugin.ClientFlowExecutionRepositoryException: Error encoding flow execution
at org.apereo.spring.webflow.plugin.ClientFlowExecutionRepository.getKey(ClientFlowExecutionRepository.java:114) ~[spring-webflow-client-repo-1.0.3.jar:1.0.3]
at org.springframework.webflow.engine.impl.FlowExecutionImpl.assignKey(FlowExecutionImpl.java:419) ~[spring-webflow-2.4.6.RELEASE.jar:2.4.6.RELEASE]
at org.springframework.webflow.engine.impl.RequestControlContextImpl.assignFlowExecutionKey(RequestControlContextImpl.java:193) ~[spring-webflow-2.4.6.RELEASE.jar:2.4.6.RELEASE]
at org.springframework.webflow.engine.ViewState.doEnter(ViewState.java:170) ~[spring-webflow-2.4.6.RELEASE.jar:2.4.6.RELEASE]
at org.springframework.webflow.engine.State.enter(State.java:194) ~[spring-webflow-2.4.6.RELEASE.jar:2.4.6.RELEASE]
at org.springframework.webflow.engine.Transition.execute(Transition.java:228) ~[spring-webflow-2.4.6.RELEASE.jar:2.4.6.RELEASE]
at org.springframework.webflow.engine.impl.FlowExecutionImpl.execute(FlowExecutionImpl.java:395) ~[spring-webflow-2.4.6.RELEASE.jar:2.4.6.RELEASE]
at org.springframework.webflow.engine.impl.RequestControlContextImpl.execute(RequestControlContextImpl.java:214) ~[spring-webflow-2.4.6.RELEASE.jar:2.4.6.RELEASE]

Caused by: java.io.NotSerializableException: org.springframework.core.io.UrlResource
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184) ~[?:1.8.0_151]
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) ~[?:1.8.0_151]
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509) ~[?:1.8.0_151]
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) ~[?:1.8.0_151]
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) ~[?:1.8.0_151]
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) ~[?:1.8.0_151]
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509) ~[?:1.8.0_151]
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) ~[?:1.8.0_151]


I posted the output to pastebin since it was too large for just posting here: https://pastebin.com/yNPk4u7n

Man H

unread,
Feb 9, 2018, 9:59:12 AM2/9/18
to cas-...@apereo.org
What do you mean by REMOVED in properties . 
--
- Website: https://apereo.github.io/cas
- Gitter Chatroom: https://gitter.im/apereo/cas
- List Guidelines: https://goo.gl/1VRrw7
- Contributions: https://goo.gl/mh7qDG
---
You received this message because you are subscribed to the Google Groups "CAS Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cas-user+unsubscribe@apereo.org.
To view this discussion on the web visit https://groups.google.com/a/apereo.org/d/msgid/cas-user/b3ba67e2-e0ca-4a8e-853b-041343564b9f%40apereo.org.

brian mancuso

unread,
Feb 9, 2018, 10:14:24 AM2/9/18
to CAS Community
Anything that says "REMOVED" is just stuff I pulled out before posting it. I didn't want to post any private/sensitive information.
To unsubscribe from this group and stop receiving emails from it, send an email to cas-user+u...@apereo.org.

Brian Davidson

unread,
Feb 9, 2018, 3:11:31 PM2/9/18
to cas-...@apereo.org
Just to add a bit to what Brian M. provided (I’m also a Brian, and a co-worker of Brian M’s):

We have Duo MFA working if we comment out:
cas.authn.mfa.duo[0].bypass.type=GROOVY
cas.authn.mfa.duo[0].bypass.groovy.location=file:///etc/cas/selectiveDuo.groovy

We did find that CAS was unable to check to see if the user exists in Duo if we used the “CAS” integration in Duo.  But it works if we set up the integration as “Auth API”.

We haven’t touched webflow. With the groovy script in place, 

When we enable GROOVY bypass script, we get:

2018-02-09 15:04:55,638 DEBUG [org.springframework.webflow.engine.impl.FlowExecutionImpl] - <Attempting to handle [org.springframework.webflow.execution.FlowExecutionException: Exception thrown in state 'viewLoginFormDuo' of flow 'mfa-duo'] with root cause [java.io.NotSerializableException: org.springframework.core.io.UrlResource]>

As well as the stack trace Brian M. provided.

cas.authn.mfa.duo[0].bypass.groovy.location was the missing piece yesterday.  Dug through source code to find that.  We’re happy to provide updates to the documentation once we get this working.

Thanks for the help!

Man H

unread,
Feb 9, 2018, 5:19:47 PM2/9/18
to cas-...@apereo.org

add
        <dependency>
             <groupId>org.apereo.cas</groupId>
             <artifactId>cas-server-core-authentication</artifactId>
             <version>${cas.version}</version>
        </dependency>

with:

cas.authn.mfa.duo[0].bypass.type=GROOVY
cas.authn.mfa.duo[0].bypass.groovy.location=file:/etc/cas/config/mfaGroovyTrigger.groovy

you should get

2018-02-09 19:10:39,145 DEBUG [org.apereo.cas.authentication.GroovyMultifactorAuthenticationProviderBypass] - <Evaluating multifactor authentication bypass properties for principal [casuser], service [null] and provider [DefaultDuoMultifactorAuthenticationProvider] via Groovy script [URL [file:/etc/cas/config/mfaGroovyTrigger.groovy]]>





To unsubscribe from this group and stop receiving emails from it, send an email to cas-user+unsubscribe@apereo.org.

--
- Website: https://apereo.github.io/cas
- Gitter Chatroom: https://gitter.im/apereo/cas
- List Guidelines: https://goo.gl/1VRrw7
- Contributions: https://goo.gl/mh7qDG
---
You received this message because you are subscribed to the Google Groups "CAS Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cas-user+unsubscribe@apereo.org.
To view this discussion on the web visit https://groups.google.com/a/apereo.org/d/msgid/cas-user/2A0C53A0-2FFF-4F1E-AAAE-B9647B352CB5%40gmail.com.

Brian Davidson

unread,
Feb 9, 2018, 11:36:57 PM2/9/18
to cas-...@apereo.org
Added cas-server-core-authentication dependency.  Still getting the same exception.

I do get:

2018-02-09 23:31:04,841 DEBUG [org.apereo.cas.authentication.GroovyMultifactorAuthenticationProviderBypass] - <Evaluating multifactor authentication bypass properties for principal [myusername], service [null] and provider [DefaultDuoMultifactorAuthenticationProvider] via Groovy script [URL [file:/etc/cas/selectiveDuo.groovy]]>

We’ve had that working since adding the bypass.type=GROOVY and bypass.groovy.location I mentioned in the previous email.

We then get:

2018-02-09 23:31:06,088 DEBUG [org.apereo.cas.authentication.AbstractMultifactorAuthenticationProvider] - <[DefaultDuoMultifactorAuthenticationProvider] voted to support this authentication request>
2018-02-09 23:31:06,089 DEBUG [org.springframework.webflow.execution.ActionExecutor] - <Finished executing org.apereo.cas.web.flow.actions.InitialAuthenticationAction@75193cbe; result = mfa-duo>
2018-02-09 23:31:06,089 DEBUG [org.springframework.webflow.execution.AnnotatedAction] - <Clearing action execution attributes map[[empty]]>
2018-02-09 23:31:06,089 DEBUG [org.springframework.webflow.execution.ActionExecutor] - <Finished executing [EvaluateAction@7171341d expression = authenticationViaFormAction, resultExpression = [null]]; result = mfa-duo>
2018-02-09 23:31:06,089 DEBUG [org.springframework.webflow.engine.Transition] - <Executing [Transition@c6fed75 on = mfa-duo, to = mfa-duo]>
2018-02-09 23:31:06,089 DEBUG [org.springframework.webflow.engine.Transition] - <Exiting state 'realSubmit'>
2018-02-09 23:31:06,089 DEBUG [org.springframework.webflow.engine.SubflowState] - <Entering state 'mfa-duo' of flow 'login'>
2018-02-09 23:31:06,089 DEBUG [org.springframework.webflow.definition.registry.FlowDefinitionRegistryImpl] - <Getting FlowDefinition with id 'mfa-duo'>
2018-02-09 23:31:06,089 DEBUG [org.springframework.webflow.engine.SubflowState] - <Calling subflow 'mfa-duo' with input map[[empty]]>
2018-02-09 23:31:06,089 DEBUG [org.springframework.webflow.engine.Flow] - <Creating [FlowVariable@328e7891 name = 'credential', valueFactory = [BeanFactoryVariableValueFactory@f584ac1 type = DuoCredential]]>
2018-02-09 23:31:06,100 DEBUG [org.springframework.webflow.execution.ActionExecutor] - <Executing [EvaluateAction@2f5ae1b2 expression = initialFlowSetupAction, resultExpression = [null]]>
2018-02-09 23:31:06,100 DEBUG [org.springframework.webflow.execution.AnnotatedAction] - <Putting action execution attributes map[[empty]]>
2018-02-09 23:31:06,100 DEBUG [org.springframework.webflow.execution.ActionExecutor] - <Executing org.apereo.cas.web.flow.InitialFlowSetupAction@89ca34b>
2018-02-09 23:31:06,101 DEBUG [org.apereo.cas.authentication.principal.WebApplicationServiceFactory] - <No service is specified in the request. Skipping service creation>
2018-02-09 23:31:06,102 DEBUG [org.springframework.webflow.execution.ActionExecutor] - <Finished executing org.apereo.cas.web.flow.InitialFlowSetupAction@89ca34b; result = success>
2018-02-09 23:31:06,102 DEBUG [org.springframework.webflow.execution.AnnotatedAction] - <Clearing action execution attributes map[[empty]]>
2018-02-09 23:31:06,102 DEBUG [org.springframework.webflow.execution.ActionExecutor] - <Finished executing [EvaluateAction@2f5ae1b2 expression = initialFlowSetupAction, resultExpression = [null]]; result = success>
2018-02-09 23:31:06,102 DEBUG [org.springframework.webflow.engine.ActionState] - <Entering state 'initializeLoginForm' of flow 'mfa-duo'>
2018-02-09 23:31:06,102 DEBUG [org.springframework.webflow.execution.ActionExecutor] - <Executing [EvaluateAction@6e514e38 expression = initializeLoginAction, resultExpression = [null]]>
2018-02-09 23:31:06,102 DEBUG [org.springframework.webflow.execution.AnnotatedAction] - <Putting action execution attributes map[[empty]]>
2018-02-09 23:31:06,102 DEBUG [org.springframework.webflow.execution.ActionExecutor] - <Executing org.apereo.cas.web.flow.InitializeLoginAction@43a254c6>
2018-02-09 23:31:06,102 DEBUG [org.springframework.webflow.execution.ActionExecutor] - <Finished executing org.apereo.cas.web.flow.InitializeLoginAction@43a254c6; result = success>
2018-02-09 23:31:06,102 DEBUG [org.springframework.webflow.execution.AnnotatedAction] - <Clearing action execution attributes map[[empty]]>
2018-02-09 23:31:06,102 DEBUG [org.springframework.webflow.execution.ActionExecutor] - <Finished executing [EvaluateAction@6e514e38 expression = initializeLoginAction, resultExpression = [null]]; result = success>
2018-02-09 23:31:06,102 DEBUG [org.springframework.webflow.engine.Transition] - <Executing [Transition@23121f71 on = success, to = determineDuoUserAccount]>
2018-02-09 23:31:06,102 DEBUG [org.springframework.webflow.engine.Transition] - <Exiting state 'initializeLoginForm'>
2018-02-09 23:31:06,102 DEBUG [org.springframework.webflow.engine.ActionState] - <Entering state 'determineDuoUserAccount' of flow 'mfa-duo'>
2018-02-09 23:31:06,102 DEBUG [org.springframework.webflow.execution.ActionExecutor] - <Executing [EvaluateAction@12d6ed17 expression = determineDuoUserAccountAction, resultExpression = [null]]>
2018-02-09 23:31:06,102 DEBUG [org.springframework.webflow.execution.AnnotatedAction] - <Putting action execution attributes map[[empty]]>
2018-02-09 23:31:06,102 DEBUG [org.springframework.webflow.execution.ActionExecutor] - <Executing org.apereo.cas.adaptors.duo.web.flow.action.DetermineDuoUserAccountAction@13bb9089>
2018-02-09 23:31:06,216 DEBUG [org.springframework.webflow.execution.ActionExecutor] - <Finished executing org.apereo.cas.adaptors.duo.web.flow.action.DetermineDuoUserAccountAction@13bb9089; result = success>
2018-02-09 23:31:06,216 DEBUG [org.springframework.webflow.execution.AnnotatedAction] - <Clearing action execution attributes map[[empty]]>
2018-02-09 23:31:06,216 DEBUG [org.springframework.webflow.execution.ActionExecutor] - <Finished executing [EvaluateAction@12d6ed17 expression = determineDuoUserAccountAction, resultExpression = [null]]; result = success>
2018-02-09 23:31:06,216 DEBUG [org.springframework.webflow.engine.Transition] - <Executing [Transition@6af9d98e on = success, to = determineDuoRequest]>
2018-02-09 23:31:06,216 DEBUG [org.springframework.webflow.engine.Transition] - <Exiting state 'determineDuoUserAccount'>
2018-02-09 23:31:06,216 DEBUG [org.springframework.webflow.engine.ActionState] - <Entering state 'determineDuoRequest' of flow 'mfa-duo'>
2018-02-09 23:31:06,216 DEBUG [org.springframework.webflow.execution.ActionExecutor] - <Executing [EvaluateAction@ebd6a67 expression = checkWebAuthenticationRequestAction, resultExpression = [null]]>
2018-02-09 23:31:06,216 DEBUG [org.springframework.webflow.execution.AnnotatedAction] - <Putting action execution attributes map[[empty]]>
2018-02-09 23:31:06,217 DEBUG [org.springframework.webflow.execution.ActionExecutor] - <Executing org.apereo.cas.web.flow.actions.CheckWebAuthenticationRequestAction@6b1440b9>
2018-02-09 23:31:06,217 DEBUG [org.springframework.webflow.execution.ActionExecutor] - <Finished executing org.apereo.cas.web.flow.actions.CheckWebAuthenticationRequestAction@6b1440b9; result = yes>
2018-02-09 23:31:06,217 DEBUG [org.springframework.webflow.execution.AnnotatedAction] - <Clearing action execution attributes map[[empty]]>
2018-02-09 23:31:06,218 DEBUG [org.springframework.webflow.execution.ActionExecutor] - <Finished executing [EvaluateAction@ebd6a67 expression = checkWebAuthenticationRequestAction, resultExpression = [null]]; result = yes>
2018-02-09 23:31:06,218 DEBUG [org.springframework.webflow.engine.Transition] - <Executing [Transition@3d670556 on = yes, to = viewLoginFormDuo]>
2018-02-09 23:31:06,218 DEBUG [org.springframework.webflow.engine.Transition] - <Exiting state 'determineDuoRequest'>
2018-02-09 23:31:06,218 DEBUG [org.springframework.webflow.engine.ViewState] - <Entering state 'viewLoginFormDuo' of flow 'mfa-duo'>
2018-02-09 23:31:06,218 DEBUG [org.springframework.webflow.execution.ActionExecutor] - <Executing [EvaluateAction@18fcf9b8 expression = prepareDuoWebLoginFormAction, resultExpression = [null]]>
2018-02-09 23:31:06,218 DEBUG [org.springframework.webflow.execution.AnnotatedAction] - <Putting action execution attributes map[[empty]]>
2018-02-09 23:31:06,218 DEBUG [org.springframework.webflow.execution.ActionExecutor] - <Executing org.apereo.cas.adaptors.duo.web.flow.action.PrepareDuoWebLoginFormAction@24e49adf>
2018-02-09 23:31:06,223 DEBUG [org.springframework.webflow.execution.ActionExecutor] - <Finished executing org.apereo.cas.adaptors.duo.web.flow.action.PrepareDuoWebLoginFormAction@24e49adf; result = success>
2018-02-09 23:31:06,223 DEBUG [org.springframework.webflow.execution.AnnotatedAction] - <Clearing action execution attributes map[[empty]]>
2018-02-09 23:31:06,224 DEBUG [org.springframework.webflow.execution.ActionExecutor] - <Finished executing [EvaluateAction@18fcf9b8 expression = prepareDuoWebLoginFormAction, resultExpression = [null]]; result = success>
2018-02-09 23:31:06,238 DEBUG [org.springframework.webflow.engine.impl.FlowExecutionImpl] - <Attempting to handle [org.springframework.webflow.execution.FlowExecutionException: Exception thrown in state 'viewLoginFormDuo' of flow 'mfa-duo'] with root cause [java.io.NotSerializableException: org.springframework.core.io.UrlResource]>
2018-02-09 23:31:06,238 DEBUG [org.springframework.webflow.engine.impl.FlowExecutionImpl] - <Rethrowing unhandled flow execution exception>
2018-02-09 23:31:06,241 ERROR [org.springframework.boot.web.support.ErrorPageFilter] - <Forwarding to error page from request [/login] due to exception [Exception thrown in state 'viewLoginFormDuo' of flow 'mfa-duo’]>

Followed by the stack trace that was included earlier.



Brian Davidson

unread,
Feb 9, 2018, 11:38:59 PM2/9/18
to cas-...@apereo.org
I meant to add, our pom.xml has the following dependencies (in case we’re missing something):

<dependencies>
        <dependency>
            <groupId>org.apereo.cas</groupId>
            <artifactId>cas-server-webapp-${app.server}</artifactId>
            <version>${cas.version}</version>
            <type>war</type>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.apereo.cas</groupId>
            <artifactId>cas-server-support-ldap</artifactId>
            <version>${cas.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apereo.cas</groupId>
            <artifactId>cas-server-support-saml</artifactId>
            <version>${cas.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apereo.cas</groupId>
            <artifactId>cas-server-support-hazelcast-ticket-registry</artifactId>
            <version>${cas.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apereo.cas</groupId>
            <artifactId>cas-server-support-duo</artifactId>
            <version>${cas.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apereo.cas</groupId>
            <artifactId>cas-server-support-json-service-registry</artifactId>
            <version>${cas.version}</version>
        </dependency>
        <dependency>
            <groupId>org.javassist</groupId>
            <artifactId>javassist</artifactId>
            <version>3.17.1-GA</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <type>jar</type>
        </dependency>
        <dependency>
            <groupId>org.apereo.cas</groupId>
            <artifactId>cas-server-core-webflow</artifactId>
            <version>${cas.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apereo.cas</groupId>
            <artifactId>cas-server-core-web</artifactId>
            <version>${cas.version}</version>
            <type>jar</type>
        </dependency>
        <dependency>
            <groupId>org.apereo.cas</groupId>
            <artifactId>cas-server-core-configuration</artifactId>
            <version>${cas.version}</version>
            <type>jar</type>
        </dependency>
<dependency>
            <groupId>org.apereo.cas</groupId>
   <artifactId>cas-server-core-authentication</artifactId>
   <version>${cas.version}</version>
</dependency>
    </dependencies>


On Feb 9, 2018, at 5:19 PM, Man H <info.i...@gmail.com> wrote:

Man H

unread,
Feb 10, 2018, 6:04:41 AM2/10/18
to cas-...@apereo.org

External

A CAS deployment may be deployed to any number of external servlet containers. The container MUST support the servlet specification v3.1.x at a minimum.


https://apereo.github.io/cas/5.2.x/installation/Configuring-Servlet-Container.html


--
- Website: https://apereo.github.io/cas
- Gitter Chatroom: https://gitter.im/apereo/cas
- List Guidelines: https://goo.gl/1VRrw7
- Contributions: https://goo.gl/mh7qDG
---
You received this message because you are subscribed to the Google Groups "CAS Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cas-user+u...@apereo.org.

--
- Website: https://apereo.github.io/cas
- Gitter Chatroom: https://gitter.im/apereo/cas
- List Guidelines: https://goo.gl/1VRrw7
- Contributions: https://goo.gl/mh7qDG
---
You received this message because you are subscribed to the Google Groups "CAS Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cas-user+unsubscribe@apereo.org.

--
- Website: https://apereo.github.io/cas
- Gitter Chatroom: https://gitter.im/apereo/cas
- List Guidelines: https://goo.gl/1VRrw7
- Contributions: https://goo.gl/mh7qDG
---
You received this message because you are subscribed to the Google Groups "CAS Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cas-user+unsubscribe@apereo.org.
To view this discussion on the web visit https://groups.google.com/a/apereo.org/d/msgid/cas-user/4B953717-A37E-4E87-AD49-2BF69A7124C1%40gmail.com.

Man H

unread,
Feb 10, 2018, 6:37:20 AM2/10/18
to cas-...@apereo.org
Assuming you are on 5.2.2


El sábado, 10 de febrero de 2018, Brian Davidson <awk....@gmail.com> escribió:

--
- Website: https://apereo.github.io/cas
- Gitter Chatroom: https://gitter.im/apereo/cas
- List Guidelines: https://goo.gl/1VRrw7
- Contributions: https://goo.gl/mh7qDG
---
You received this message because you are subscribed to the Google Groups "CAS Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cas-user+u...@apereo.org.

--
- Website: https://apereo.github.io/cas
- Gitter Chatroom: https://gitter.im/apereo/cas
- List Guidelines: https://goo.gl/1VRrw7
- Contributions: https://goo.gl/mh7qDG
---
You received this message because you are subscribed to the Google Groups "CAS Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cas-user+unsubscribe@apereo.org.

--
- Website: https://apereo.github.io/cas
- Gitter Chatroom: https://gitter.im/apereo/cas
- List Guidelines: https://goo.gl/1VRrw7
- Contributions: https://goo.gl/mh7qDG
---
You received this message because you are subscribed to the Google Groups "CAS Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cas-user+unsubscribe@apereo.org.
To view this discussion on the web visit https://groups.google.com/a/apereo.org/d/msgid/cas-user/4B953717-A37E-4E87-AD49-2BF69A7124C1%40gmail.com.

Brian Davidson

unread,
Feb 10, 2018, 7:16:01 AM2/10/18
to cas-...@apereo.org
Running on apache-tomcat-8.5.24, so that should be servlet v3.1.x.

Yes, this is CAS version 5.2.2.

CAS w/ Duo works with no bypass groovy script in place.  CAS  works with bypass groovy script that returns false.  We’re just getting the exception when the groovy script returns true.

Thanks again for all the help!




External

A CAS deployment may be deployed to any number of external servlet containers. The container MUST support the servlet specification v3.1.x at a minimum.

Man H

unread,
Feb 10, 2018, 7:20:45 AM2/10/18
to cas-...@apereo.org
Why you hace this


      <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <type>jar</type>
        </dependency>



--
- Website: https://apereo.github.io/cas
- Gitter Chatroom: https://gitter.im/apereo/cas
- List Guidelines: https://goo.gl/1VRrw7
- Contributions: https://goo.gl/mh7qDG
---
You received this message because you are subscribed to the Google Groups "CAS Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cas-user+u...@apereo.org.

--
- Website: https://apereo.github.io/cas
- Gitter Chatroom: https://gitter.im/apereo/cas
- List Guidelines: https://goo.gl/1VRrw7
- Contributions: https://goo.gl/mh7qDG
---
You received this message because you are subscribed to the Google Groups "CAS Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cas-user+unsubscribe@apereo.org.

--
- Website: https://apereo.github.io/cas
- Gitter Chatroom: https://gitter.im/apereo/cas
- List Guidelines: https://goo.gl/1VRrw7
- Contributions: https://goo.gl/mh7qDG
---
You received this message because you are subscribed to the Google Groups "CAS Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cas-user+unsubscribe@apereo.org.

Brian Davidson

unread,
Feb 10, 2018, 7:35:53 AM2/10/18
to cas-...@apereo.org
Removed that dependency and still git the same 500 error and same stack trace.

Man H

unread,
Feb 10, 2018, 8:15:52 AM2/10/18
to cas-...@apereo.org
Could you be more specific

We did find that CAS was unable to check to see if the user exists in Duo if we used the “CAS” integration in Duo.  But it works if we set up the integration as “Auth API”.


Why you hace this


--
- Website: https://apereo.github.io/cas
- Gitter Chatroom: https://gitter.im/apereo/cas
- List Guidelines: https://goo.gl/1VRrw7
- Contributions: https://goo.gl/mh7qDG
---
You received this message because you are subscribed to the Google Groups "CAS Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cas-user+u...@apereo.org.

--
- Website: https://apereo.github.io/cas
- Gitter Chatroom: https://gitter.im/apereo/cas
- List Guidelines: https://goo.gl/1VRrw7
- Contributions: https://goo.gl/mh7qDG
---
You received this message because you are subscribed to the Google Groups "CAS Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cas-user+unsubscribe@apereo.org.

--
- Website: https://apereo.github.io/cas
- Gitter Chatroom: https://gitter.im/apereo/cas
- List Guidelines: https://goo.gl/1VRrw7
- Contributions: https://goo.gl/mh7qDG
---
You received this message because you are subscribed to the Google Groups "CAS Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cas-user+unsubscribe@apereo.org.

Man H

unread,
Feb 10, 2018, 8:43:39 AM2/10/18
to cas-...@apereo.org
Could you try this

def boolean run(final Object... args){
    
def authentication = args[0]
    
def principal = args[1]
    
def service = args[2]
    
def provider = args[3]
    
def logger = args[4]
    
def httpRequest = args[5]
    
    logger
.info("Evaluating principal attributes ${principal.attributes}")

return true
}
Why you hace this


--
- Website: https://apereo.github.io/cas
- Gitter Chatroom: https://gitter.im/apereo/cas
- List Guidelines: https://goo.gl/1VRrw7
- Contributions: https://goo.gl/mh7qDG
---
You received this message because you are subscribed to the Google Groups "CAS Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cas-user+u...@apereo.org.

--
- Website: https://apereo.github.io/cas
- Gitter Chatroom: https://gitter.im/apereo/cas
- List Guidelines: https://goo.gl/1VRrw7
- Contributions: https://goo.gl/mh7qDG
---
You received this message because you are subscribed to the Google Groups "CAS Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cas-user+unsubscribe@apereo.org.

--
- Website: https://apereo.github.io/cas
- Gitter Chatroom: https://gitter.im/apereo/cas
- List Guidelines: https://goo.gl/1VRrw7
- Contributions: https://goo.gl/mh7qDG
---
You received this message because you are subscribed to the Google Groups "CAS Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cas-user+unsubscribe@apereo.org.

Man H

unread,
Feb 10, 2018, 8:48:54 AM2/10/18
to cas-...@apereo.org
Or this


def boolean run(final Object... args){

    logger
.info("Evaluating principal")
return true
Why you hace this


--
- Website: https://apereo.github.io/cas
- Gitter Chatroom: https://gitter.im/apereo/cas
- List Guidelines: https://goo.gl/1VRrw7
- Contributions: https://goo.gl/mh7qDG
---
You received this message because you are subscribed to the Google Groups "CAS Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cas-user+u...@apereo.org.

--
- Website: https://apereo.github.io/cas
- Gitter Chatroom: https://gitter.im/apereo/cas
- List Guidelines: https://goo.gl/1VRrw7
- Contributions: https://goo.gl/mh7qDG
---
You received this message because you are subscribed to the Google Groups "CAS Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cas-user+unsubscribe@apereo.org.

--
- Website: https://apereo.github.io/cas
- Gitter Chatroom: https://gitter.im/apereo/cas
- List Guidelines: https://goo.gl/1VRrw7
- Contributions: https://goo.gl/mh7qDG
---
You received this message because you are subscribed to the Google Groups "CAS Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cas-user+unsubscribe@apereo.org.

Brian Davidson

unread,
Feb 10, 2018, 8:58:26 AM2/10/18
to cas-...@apereo.org
I changed it from info to warn:

2018-02-10 08:54:07,061 WARN [org.apereo.cas.authentication.GroovyMultifactorAuthenticationProviderBypass] - <Evaluating principal attributes [businessCategory:[Employee, Staff], cn:Brian Davidson, ctCalDefaultNoteReminder:0:0, ctCalDefaultReminder:0:10, ctCalDefaultTaskReminder:0:0, ctCalDisplayPrefs:4:480:1080:1:30:190:2, ctCalLanguageId:0, ctCalNotifMechanism:1, ctCalOperatingPrefs:0:255:0:0:0:0:0:1440:0:1440:0:0:1440:0:1440:0:0:1440:0:1440:0:0:1440:0:1440:0:0:1440:0:1440:0:0:1440:0:1440:0:0:1440:0:1440, ctCalPasswordRequired:1, ctCalPublishedType:0, ctCalRefreshPrefs:1:60, ctCalSMSTimeRange:0:0, ctCalSysopCanWritePassword:0, ctCalTimezone:0, ctCalXItemId:10101:02238, eduPersonAffiliation:[member, staff], gecos:Brian Davidson, gidNumber:5137, givenName:Brian, gmuBannerGUID:REDACTED, gmuemployeestatus:C, gmugnumber:REDACTED, gmuMLPwdChanged:20170127190453Z, gmurup:true, gmusecurityquiz:1487691778, homeDirectory:REDACTED, iplanet-am-modifiable-by:cn=Top-level Admin Role,o=gmu.edu, l:opted-in-201103021755, loginShell:/bin/bash, mail:REDACTED, mailAllowedServiceAccess:-imap,pop,http,smtp:*, mailAlternateAddress:REDACTED, mailDeliveryOption:mailbox, mailHost:gmuedu.onmicrosoft.com, mailQuota:1048576000, mailRoutingAddress:REDACTED, nsmsgDisallowAccess:imap pop http smtp, nswmExtendedUserPrefs:[meTrashFolder=Trash, meSentFolder=Sent, meDraftFolder=Drafts, meInitialized=true], objectClass:[posixAccount, sunUCPreferences, mailrecipient, iplanetPreferences, inetLocalMailRecipient, iplanet-am-managed-person, inetOrgPerson, inetAdmin, ctCalUser, inetMailUser, iplanet-am-user-service, gmuPerson, shadowAccount, userPresenceProfile, inetUser, top, person, organizationalPerson, ipuser, eduPerson, account], ou=people,o=gmu.edu,o=pab, sn:Davidson, uid:REDACTED, uidNumber:888, userPassword:REDACTED]>

Man H

unread,
Feb 10, 2018, 9:31:58 AM2/10/18
to cas-...@apereo.org
I am not on my computer so can't do tests.

You said your script works when returning false, what is result in this case when returning true

--
- Website: https://apereo.github.io/cas
- Gitter Chatroom: https://gitter.im/apereo/cas
- List Guidelines: https://goo.gl/1VRrw7
- Contributions: https://goo.gl/mh7qDG
---
You received this message because you are subscribed to the Google Groups "CAS Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cas-user+u...@apereo.org.

--
- Website: https://apereo.github.io/cas
- Gitter Chatroom: https://gitter.im/apereo/cas
- List Guidelines: https://goo.gl/1VRrw7
- Contributions: https://goo.gl/mh7qDG
---
You received this message because you are subscribed to the Google Groups "CAS Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cas-user+unsubscribe@apereo.org.

--
- Website: https://apereo.github.io/cas
- Gitter Chatroom: https://gitter.im/apereo/cas
- List Guidelines: https://goo.gl/1VRrw7
- Contributions: https://goo.gl/mh7qDG
---
You received this message because you are subscribed to the Google Groups "CAS Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cas-user+unsubscribe@apereo.org.

Man H

unread,
Feb 10, 2018, 10:14:56 AM2/10/18
to cas-...@apereo.org
Try returning string "mfa-duo" or null

--
- Website: https://apereo.github.io/cas
- Gitter Chatroom: https://gitter.im/apereo/cas
- List Guidelines: https://goo.gl/1VRrw7
- Contributions: https://goo.gl/mh7qDG
---
You received this message because you are subscribed to the Google Groups "CAS Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cas-user+u...@apereo.org.

--
- Website: https://apereo.github.io/cas
- Gitter Chatroom: https://gitter.im/apereo/cas
- List Guidelines: https://goo.gl/1VRrw7
- Contributions: https://goo.gl/mh7qDG
---
You received this message because you are subscribed to the Google Groups "CAS Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cas-user+unsubscribe@apereo.org.

--
- Website: https://apereo.github.io/cas
- Gitter Chatroom: https://gitter.im/apereo/cas
- List Guidelines: https://goo.gl/1VRrw7
- Contributions: https://goo.gl/mh7qDG
---
You received this message because you are subscribed to the Google Groups "CAS Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cas-user+unsubscribe@apereo.org.
To view this discussion on the web visit https://groups.google.com/a/apereo.org/d/msgid/cas-user/2B4CEB0E-10CF-46AA-8D9B-A04FCA5CA2BE%40gmail.com.

Brian Davidson

unread,
Feb 10, 2018, 11:29:37 AM2/10/18
to cas-...@apereo.org
Switching the function to return a String instead of a boolean, I get:

2018-02-10 11:25:06,033 ERROR [org.apereo.cas.util.ScriptingUtils] - <Result [mfa-duo is of type class java.lang.String when we were expecting class java.lang.Boolean>
java.lang.ClassCastException: Result [mfa-duo is of type class java.lang.String when we were expecting class java.lang.Boolean


2018-02-10 11:25:06,952 ERROR [org.apereo.cas.authentication.GroovyMultifactorAuthenticationProviderBypass] - <null>
java.lang.NullPointerException: null
at org.apereo.cas.authentication.GroovyMultifactorAuthenticationProviderBypass.shouldMultifactorAuthenticationProviderExecute(GroovyMultifactorAuthenticationProviderBypass.java:40) ~[cas-server-core-authentication-mfa-5.2.2-SNAPSHOT.jar:5.2.2-SNAPSHOT]






Dmitriy Kopylenko

unread,
Feb 10, 2018, 11:39:09 AM2/10/18
to cas-...@apereo.org
Let me suggest to get the Groovy script out of equation completely. Switch this groovy bypass off, and try to perform entire duo 2 factor authentication transaction. If it completes successfully and then you again enable groovy bypass and then after it you get the failures that you are seeing, then the problem indeed is somewhere in that bypass facility.

Cheers,
D.




Brian Davidson

unread,
Feb 10, 2018, 12:01:17 PM2/10/18
to cas-...@apereo.org
I have tried that.  Duo works when I disable the bypass facility.  When I enable it, if bypass script returns false, single factor works and I don’t get a 500 error. If the groovy script returns true, I get the 500 error. 

So, the Duo integration is working.  The bypass groovy script definitely is getting called, and it definitely should return a boolean, not a string.

2018-02-09 15:04:55,638 DEBUG [org.springframework.webflow.engine.impl.FlowExecutionImpl] - <Attempting to handle [org.springframework.webflow.execution.FlowExecutionException: Exception thrown in state 'viewLoginFormDuo' of flow 'mfa-duo'] with root cause [java.io.NotSerializableException: org.springframework.core.io.UrlResource]>

Seems like Spring web flow with the duo flow is not happy with something when the bypass script is in place, but it’s fine when bypass isn’t in place.

Thanks!

Brian

Dmitriy Kopylenko

unread,
Feb 10, 2018, 12:34:29 PM2/10/18
to cas-...@apereo.org
Thanks for confirming. Sounds like a bug to me.

D.




Man H

unread,
Feb 10, 2018, 12:48:10 PM2/10/18
to cas-...@apereo.org
Indeed!!

--
- Website: https://apereo.github.io/cas
- Gitter Chatroom: https://gitter.im/apereo/cas
- List Guidelines: https://goo.gl/1VRrw7
- Contributions: https://goo.gl/mh7qDG
---
You received this message because you are subscribed to the Google Groups "CAS Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cas-user+u...@apereo.org.

--
- Website: https://apereo.github.io/cas
- Gitter Chatroom: https://gitter.im/apereo/cas
- List Guidelines: https://goo.gl/1VRrw7
- Contributions: https://goo.gl/mh7qDG
---
You received this message because you are subscribed to the Google Groups "CAS Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cas-user+unsubscribe@apereo.org.

--
- Website: https://apereo.github.io/cas
- Gitter Chatroom: https://gitter.im/apereo/cas
- List Guidelines: https://goo.gl/1VRrw7
- Contributions: https://goo.gl/mh7qDG
---
You received this message because you are subscribed to the Google Groups "CAS Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cas-user+unsubscribe@apereo.org.

--
- Website: https://apereo.github.io/cas
- Gitter Chatroom: https://gitter.im/apereo/cas
- List Guidelines: https://goo.gl/1VRrw7
- Contributions: https://goo.gl/mh7qDG
---
You received this message because you are subscribed to the Google Groups "CAS Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cas-user+unsubscribe@apereo.org.

--
- Website: https://apereo.github.io/cas
- Gitter Chatroom: https://gitter.im/apereo/cas
- List Guidelines: https://goo.gl/1VRrw7
- Contributions: https://goo.gl/mh7qDG
---
You received this message because you are subscribed to the Google Groups "CAS Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cas-user+unsubscribe@apereo.org.
- List Guidelines: To view this discussion on the web visit

Brian Davidson

unread,
Feb 13, 2018, 7:34:54 AM2/13/18
to cas-...@apereo.org
Man,

Just providing clarification on this other issue that I hadn’t gotten back to you on.  I think the issue in this specific email is an issue with duo.com, while the other issue in this thread is an issue with CAS.

In order for CAS to be able to use Duo you must obtain an integration key, shared secret and api host from Duo.  You do this by logging in to duo.com as an administrator and selecting “Add new application”.  You are then presented with a list of 137 types of applications you can integrate with:

1Password
Duo Admin API
Duo Auth API
CAS
Cisco RADIUS VPN
etc.


If you select the CAS integration, you’ll receive en error (not authorized, I believe) when trying to use the Duo preauth endpoint, which is what the CAS Duo adapter uses:

https://github.com/apereo/cas/blob/468d834242d8c027d4f2333bb7b4d1c99b645630/support/cas-server-support-duo-core/src/main/java/org/apereo/cas/adaptors/duo/authn/BaseDuoSecurityAuthenticationService.java#L170


When setting up the application at duo.com if you instead choose Duo Auth API, the preauth endpoint works correctly.  There are no user configurable permissions that I’ve been able to find on Duo’s site, so this is a backend thing that they will need to change.  I will be opening a ticket with them to address this.

Here’s the Duo documentation for the preauth endpoint:


Thanks again for all of the help!

Brian

Brian Davidson

unread,
Feb 13, 2018, 7:41:53 AM2/13/18
to cas-...@apereo.org
Thanks for confirming it’s a bug.  Do we need to open an issue in a bug tracker?  If so, where?

Any suggestions where to start poking in the code to try to debug this some more?  As best we can tell it’s throwing an exception in Spring web flow (which unfortunately we haven’t used so we’ve got a learning curve there).  And it looks like there’s a CAS plugin for web flow, so I’m hoping that might be a good place to put some debugging code.

Thanks,

Brian

Brian Davidson

unread,
Feb 13, 2018, 11:00:02 AM2/13/18
to cas-...@apereo.org
Here’s the error that’s returned if the “CAS” integration is used when configuring on duo.com website.  I have opened an issue with Duo.

2018-02-13 10:53:37,995 DEBUG [org.apereo.cas.adaptors.duo.authn.BaseDuoSecurityAuthenticationService] - <Received Duo admin response [{"code": 40301, "message": "Access forbidden", "message_detail": "Wrong integration type for this API.", "stat": "FAIL"}]>

Brian Davidson

unread,
Feb 22, 2018, 3:03:44 PM2/22/18
to cas-...@apereo.org
Do we need to open an issue in a bug tracker?  If so, where?

Any suggestions where to start poking in the code to try to debug this some more?  As best we can tell it’s throwing an exception in Spring web flow (which unfortunately we haven’t used so we’ve got a learning curve there).  And it looks like there’s a CAS plugin for web flow, so I’m hoping that might be a good place to put some debugging code.

Thanks,

Brian

Dmitriy Kopylenko

unread,
Feb 22, 2018, 3:07:37 PM2/22/18
to cas-...@apereo.org
The main “bug tracker” for CAS project is an open pull request ;-)

May I suggest you first try 5.3.0-RC3-SNAPSHOT…

D.
Reply all
Reply to author
Forward
0 new messages