Hey Ray, thanks for responding.
Yes, the application frequently uses the OAuth access token and refresh token given to it after the user authenticates. During each application invocation, the application uses the access token it was given as authentication in some web service calls. If the access token is expired, it uses the refresh token to obtain a new access token (this is typical behavior in OAuth 2). However, if the refresh token is invalid (e.g. due to expired TGT), the application interaction is halted. The UX for this scenario is poor and this behavior is outside our control. This is for some hands free voice integration work, so even if we could somehow reprompt for authentication the user wouldn't be in a good position to provide credentials (or might not be able to because the hardware was configured by someone else).
That leads us to a solution of keeping refresh tokens alive for a long time, but we don't want to increase the TGT max life because that would affect other services as well and feels too broad with unknown implications.
We've set logoutType to NONE on the service definition for this application, but this only disables CAS' behavior of POSTing to a logout endpoint for the application. It doesn't change the behavior of expiring OAuth refresh tokens when the parent TGT expires. It looks like the way to change that behavior is to override the logoutExecutionPlan bean or to define our own LogoutManager and I was hoping to find or hear of an example of doing such.
The problematic code we want to work around can be seen in the CAS source, the method
CasCoreLogoutConfiguration::configureLogoutExecutionPlan. When a TGT is expired, all descendant tickets are also deleted. The default
logoutExecutionPlan bean configures the behavior, so hence my questions regarding overriding it.
Thanks,
Caleb