如何通过Android登录此CAS系统

3
我已经努力了一个月,试图弄清如何通过Android登录我的大学CAS系统。我对HTTP和身份验证一窍不通,花了很多时间搜索术语,但现在基本上掌握了它们。
无论如何,我正在尝试登录CAS系统,我能够找到系统如何工作的图表,我已经发布在下面。

http://www.middleware.vt.edu/lib/exe/detail.php?id=middleware%3Acas%3Aprotocol&media=middleware:cas:cas_v1_authentication.png

我目前有以下代码:

DefaultHttpClient httpClient = new DefaultHttpClient();
    
    try {
        
        HttpGet httpGet = new HttpGet(LOGIN);
        
        HttpResponse response = httpClient.execute(httpGet);
        HttpEntity entity = response.getEntity();
        
        Log.i(TAG, "Login form get: " + response.getStatusLine());
        if (entity != null) {
            
            entity.consumeContent();
        }
        Log.i(TAG, "Initial set of cookies: ");
        List<Cookie> cookies = httpClient.getCookieStore().getCookies();
        if (cookies.isEmpty()) {
            
            Log.i(TAG, "THere are no cookies");
        }
        else {
            
            for (int i = 0; i < cookies.size(); i++) {
                
                Log.i(TAG, " - " + cookies.get(i).toString());
            }
        }
        
        HttpPost httpPost = new HttpPost(LOGIN);
        
        List<NameValuePair> nvps = new ArrayList<NameValuePair>();
        nvps.add(new BasicNameValuePair("username", "MyUserName"));
        nvps.add(new BasicNameValuePair("password", "MyPassword"));
        
        httpPost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
        
        Log.i(TAG, "The last header's value is.... " + response.getAllHeaders().length);
 
        response = httpClient.execute(httpPost);
        entity = response.getEntity();
        
        Log.i(TAG, "Login form get: " + response.getStatusLine());
        if (entity != null) {
            
            entity.consumeContent();
        }
        
        Log.i(TAG, "Post login cookies: ");
        cookies = httpClient.getCookieStore().getCookies();
        if (cookies.isEmpty()) {
            
            Log.i(TAG, "No Cookies");
        }
        else {
            
            for (int i = 0; i < cookies.size(); i++) {
                
                Log.i(TAG, " - " + cookies.get(i).toString());
            }
        }
        
        httpClient.getConnectionManager().shutdown();

这段代码没有返回任何错误,但只获取了一个cookie,我认为我需要另一个COOKIE——CASTGC cookie......

我希望有经验的人能够理解上面的图表,并告诉我是否正确。

谢谢阅读。

2个回答

1
您可能会对CAS RESTful API感兴趣: https://wiki.jasig.org/display/CASUM/RESTful+API RESTful API遵循与原始CAS2协议相同的基本协议,增加了一些额外的明确定义的资源URL。这对于需要以编程方式访问CAS的应用程序特别有帮助。
希望这可以帮到您。

1
谢谢您的回复,但我最近使用Jsoup使其正常工作。 - Ethan

0
搞定了!我只需要传递正确的SSL证书并像逻辑上应该做的那样使用Jsoup。此外,还有一些隐藏字段我必须抓取和一些cookie我必须跟随响应才能得到……

请问您能否分享一些代码片段?我也遇到了同样的情况。我已经从CAS获取了服务令牌,但是如何使用它来从CAS客户端获取数据呢? - Jeba Prince
相当老的代码,我至少三年没有看过了。它可能会对你有所帮助: https://github.com/egaebel/VTAccess/blob/master/src/com/vtaccess/Cas.java - Ethan
谢谢,我会检查的。 - Jeba Prince

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接