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
我已经用 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