【问题标题】:IIS windows authentication error (401.1)IIS windows 身份验证错误 (401.1)
【发布时间】:2013-01-31 06:49:17
【问题描述】:

我已经用 PHP 5.3 和 SQL Server 配置了 IIS 8.0。

我不确定出了什么问题。当我在浏览器中输入 URL 时,我可以在 Web 浏览器中看到我的 JSON 字符串,

但是当我将它传递给下面的代码时,它是返回给我的

IIS 8.0 Detailed Error - 401.2 - Unauthorized

我的 Eclipse 中出现 401.2 错误页面。

我正在通过 Windows 身份验证连接到数据库。因此,我在我的 IIS 中设置了启用 Windows 身份验证。除了 Windows 身份验证之外,我无法进行任何其他身份验证,那么我的 JSONstring 也根本不会从浏览器返回。在这种情况下。

我已经尝试了以下 URL 中提到的解决方案

http://support.microsoft.com/kb/942043

问题依旧

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.CoreProtocolPNames;

public class JSONTester {

    /**
     * @param args
     * @throws Exception 
     */
    public static void main(String[] args) 
    {
        InputStream is = null;
        String json = "";

        try 
        {
            // defaultHttpClient
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost("http://localhost/hive/get_all_products.php");
            httpPost.getParams().setBooleanParameter(CoreProtocolPNames.USE_EXPECT_CONTINUE, false);
            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();           

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

        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            json = sb.toString();
        } catch (Exception e) {
            System.out.println(e.toString());
        }
        System.out.println(json);
    }
}

任何帮助都会很棒。

谢谢!!!

【问题讨论】:

    标签: java sql-server http iis


    【解决方案1】:

    Internet Explorer 是唯一使用开箱即用的集成模式进行 NTLM 身份验证的浏览器,这就是您的 URL 在您的“浏览器”中工作的原因。您的 Java HttpClient 必须明确地进行身份验证并回答来自服务器的 NTLM 质询。见HttpClient NTLM Authentication

    NTLM 是最复杂的身份验证协议,支持的 Http客户端。它是微软设计的专有协议,没有 公开可用的规范... NTLM 身份验证需要一个 NTCredentials 实例可用 服务器的域名或默认凭据。注意 因为 NTLM 不使用领域的概念 HttpClient 使用 服务器的域名作为领域的名称。另请注意, 提供给 NTCredentials 的用户名不应以 域 - 即:“adrian”是正确的,而“DOMAIN\adrian”不是 正确...
    HttpClient 对 NTLMv1(NTLM 协议的早期版本)提供有限支持。 HttpClient 根本不支持 NTLMv2

    重要的是 HttpClient 确实支持集成身份验证。您必须提供明确的凭据,这使得它始终探查不良做法,因为需要明确提供帐户密码。确保您不存储它而是向用户询问,这与 Firefox 在访问请求 NTLM 质询的站点时所做的非常相似。

    阅读The NTLM Authentication Protocol and Security Support Provider了解更多详情。

    【讨论】:

      【解决方案2】:

      确保您进行身份验证的帐户有权访问网站目录中的文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-23
        • 1970-01-01
        • 1970-01-01
        • 2011-07-22
        • 2011-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多