Java 客户端对 CAS 服务器进行身份验证

Java client to authenticate against CAS server

我已经用 java 编写了一个客户端应用程序,方法如下: https://wiki.jasig.org/display/casum/restful+api

我能够获得 TGT 和服务票。我还可以通过我的应用程序 "validate" 针对 CAS 的服务票据,即针对:

https://<HOST>:8443/cas/serviceValidate

使用该服务票证,我能够从浏览器验证它是否有效:

https://<HOST>:8443/MyProject/login/cas?ticket=<TICKET_ID_FROM_MY_CLIENT_APP>&service=<ENCODED URL OF SERVICE>

有效

但是我的应用程序无法使用该服务票证。 我什至尝试过:

RestTemplate rt = new RestTemplate();
ResponseEntity<String> s1 = rt.getForEntity("https://<HOST>:8443/MyProject/login/cas?ticket=<TICKET_ID_FROM_MY_CLIENT_APP>&service=<ENCODED URL OF SERVICE>", String.class);

响应是来自 CAS 的默认登录页面。但是当再次尝试浏览器时,它起作用了。请注意,我在浏览器和我的应用程序中使用相同的 url 进行测试。

(我已经修改了 CAS 配置,将 TGT 和服务票的寿命延长 1 小时,有效期计数到 1000,所以我知道过期不是问题。)

问题是什么?这与 cookie 有关系吗?

问题是 RestTemplate 是无状态的。所以,我用了: 来自 https://github.com/folkengine/StatefulRestClient.git

的 StatefullRestTemplate