如何通过Android登录此CAS系统

时间:2012-01-09 18:25:33

标签: android http authentication cookies cas

我一直在努力寻找如何通过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", "egaebel"));
        nvps.add(new BasicNameValuePair("password", "Under&round11"));

        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,当我认为我需要一个时,CASTGC cookie ......

我希望有比我更有经验的人能够理解上面的图表,至少告诉我我是否走在正确的轨道上。

感谢阅读。

2 个答案:

答案 0 :(得分:1)

您对CAS RESTful API感兴趣: https://wiki.jasig.org/display/CASUM/RESTful+API

RESTful API遵循与原始CAS2协议相同的基本协议,并增加了一些明确定义的资源URL。这对于需要以编程方式访问CAS的应用程序特别有用。

希望这有帮助。

答案 1 :(得分:0)

搞定了!我只需要传递正确的SSL证书,并在逻辑上使用Jsoup。还有一些隐藏的领域,我不得不抓住一些饼干,我必须遵循回应得到....