java - Android 中的 Microsoft ISA 服务器身份验证

标签 java android security ntlm

我在Android中有一个应用程序,我在其中从远程服务器读取文件,下面给出了读取文件的代码;

            URI uri = null;
            try {
                uri = new URI("http://192.168.1.116/Server1/Users.xml");
            } catch (URISyntaxException e) {
                e.printStackTrace();
            }
            HttpGet httpget = new HttpGet(uri);
            httpget.setHeader("Content-type", "application/json; charset=utf-8");
            httpget.setHeader("host", "192.168.1.116");

            HttpResponse response = null;
            try {
                response = httpClient.execute(httpget);

            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

            HttpEntity responseEntity = response.getEntity();
            String result = null;
            try {
                result = EntityUtils.toString(responseEntity);
                Log.d("SERVER1", result);
            } catch (ParseException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

现在所有远程文件都在需要身份验证才能访问文件的代理(Microsoft ISA Server)之后。请指导我如何从 android 传递身份验证参数以访问文件。

下面的代码我都试过了,没用,

           URL uri = null;
            try {
                uri = new URI("http:// 192.168.1.116/CookieAuth.dll?Logon");
            } catch (URISyntaxException e) {
                e.printStackTrace();
            }

             DefaultHttpClient httpclient = new DefaultHttpClient();
            httpclient.getCredentialsProvider()
                    .setCredentials(
                            AuthScope.ANY,
                            new NTCredentials(username, password, deviceIP,
                                    domainName));

            HttpPost httppost = new HttpPost(uri);
            httppost.setHeader("Content-type",
                    "application/x-www-form-urlencoded");
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("curl", "Z2FServer1/users.xmlZ2F"));
            params.add(new BasicNameValuePair("formdir", "3"));
            params.add(new BasicNameValuePair("username", "test"));
            params.add(new BasicNameValuePair("password", "test"));

            UrlEncodedFormEntity ent = null;
            try {
                ent = new UrlEncodedFormEntity(params, HTTP.UTF_8);
            } catch (UnsupportedEncodingException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            httppost.setEntity(ent);
            try {
                response = httpclient.execute(httppost);

                Log.i("Test", response.getStatusLine().toString());

                HttpEntity entity = response.getEntity();

                if (entity != null) {

                    InputStream instream = entity.getContent();
                    result = convertStreamToString(instream);
                    Log.d("ISA Server", result);

                    instream.close();
                }

            } catch (Exception e) {
                e.printStackTrace();
            }

但是它给出了 HTTP1.1 500 Internal Server Error。我也试过以下链接但同样的错误 https://stackoverflow.com/a/10937857/67381

最佳答案

在我的例子中我使用

public static DefaultHttpClient getClient(String username, String password,
        Integer timeOut) {
    HttpParams httpParams = new BasicHttpParams();
    HttpConnectionParams.setConnectionTimeout(httpParams, timeOut);
    HttpConnectionParams.setSoTimeout(httpParams, timeOut);
    DefaultHttpClient retHttpClient = new DefaultHttpClient(httpParams);
    if (username != null) {
        retHttpClient.getCredentialsProvider().setCredentials(
                new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT),
                new UsernamePasswordCredentials(username, password));
    }

    return retHttpClient;
}

尝试一下,可能会奏效。

附言

它不适用于 ISA,适用于 MS C# WebService 应用程序,但也许...

关于java - Android 中的 Microsoft ISA 服务器身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16477212/

相关文章:

php - 如何使用 session ID 进行身份验证

java - 为什么我收到死代码警告?

java - 在 Java 中 : why some Stream methods take int instead of byte or even char?

java - 输入按钮时将键盘隐藏在 fragment 中

android - 编辑文本隐藏在屏幕键盘后面

java - 将证书链保存在 pkcs12 keystore 中

security - 如何在 tomcat 中禁用 SSLv3?

java - Netbeans 配置问题

Java Swing 设计

android - 错误的交易状态(没有 Activity 的交易、错误的交易类型或交易已经在进行中)