From fc40907a5866310f620d22c7f76ba5c148fafc07 Mon Sep 17 00:00:00 2001
From: Jacek Kowalski <Jacek@jacekk.info>
Date: Tue, 03 Nov 2026 21:04:42 +0000
Subject: [PATCH] Return CAS error instead of HTTP 500 on malformed tickets
---
integrationTest/suite.sh | 36 ++++++++++++++++++++++++++++++++++++
1 files changed, 36 insertions(+), 0 deletions(-)
diff --git a/integrationTest/suite.sh b/integrationTest/suite.sh
index d389f40..ca556c1 100755
--- a/integrationTest/suite.sh
+++ b/integrationTest/suite.sh
@@ -41,6 +41,14 @@
$CURL "${keycloak_cas_url}/validate?service=http://localhost&ticket=$ticket"
echo
+echo "Testing CAS 1.0 - ticket issued for another service..."
+ticket=$(get_ticket)
+if $CURL "${keycloak_cas_url}/validate?service=http://localhost/other&ticket=$ticket"; then
+ echo "Ticket was accepted for a different service"
+ exit 1
+fi
+echo
+
# CAS 2.0
echo "Testing CAS 2.0 - XML..."
ticket=$(get_ticket)
@@ -58,6 +66,34 @@
$CURL "${keycloak_cas_url}/p3/serviceValidate?service=http://localhost&format=JSON&ticket=$ticket"
echo
+# CAS 2.0 - proxy validation
+echo "Testing CAS 2.0 - proxyValidate..."
+ticket=$(get_ticket)
+$CURL "${keycloak_cas_url}/proxyValidate?service=http://localhost&format=JSON&ticket=$ticket"
+echo
+
+echo "Testing CAS 2.0 - proxyValidate without service..."
+ticket=$(get_ticket)
+if $CURL "${keycloak_cas_url}/proxyValidate?format=JSON&ticket=$ticket"; then
+ echo "Ticket was accepted without service parameter"
+ exit 1
+fi
+echo
+
+echo "Testing CAS 2.0 - malformed ticket..."
+response=$(curl --silent --write-out '%{http_code}' --output /dev/null "${keycloak_cas_url}/serviceValidate?service=http://localhost&ticket=ST-x--zz--y")
+if [ "$response" != "400" ]; then
+ echo "Malformed ticket returned HTTP ${response} instead of 400"
+ exit 1
+fi
+
+echo "Testing CAS 2.0 - proxyValidate without ticket..."
+response=$(curl --silent --write-out '%{http_code}' --output /dev/null "${keycloak_cas_url}/proxyValidate?service=http://localhost")
+if [ "$response" != "400" ]; then
+ echo "Missing ticket returned HTTP ${response} instead of 400"
+ exit 1
+fi
+
# SAML 1.1
echo "Testing SAML 1.1..."
ticket=$(get_ticket SAML)
--
Gitblit v1.10.0