java – 从Android应用程序处理Windows集成(NTLM)身份验证有什么办法吗?

前端之家收集整理的这篇文章主要介绍了java – 从Android应用程序处理Windows集成(NTLM)身份验证有什么办法吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
正如标题所述,我们正在寻找一种访问 Windows集成(NTLM)认证背后的.NET 3.5 Web服务的方法.

我们在整个星期内搜索了互联网和论坛,我们还没有找到解决这个问题的办法.

我们已经尝试过,DefaultHttpConnections,HttpPost,HttpGet等不同的变体.

然而,我们试图认证我们遇到的这些:

SSLHandshakeException

要么

Authentication scheme ntlm not supported
   Authentication error: Unable to respond to any of these challenges: 
   ntlm=WWW-Authenticate: NTLM,negotiate=WWW-Authenticate: Negotiate

IIS身份验证设置如下:

我们正在尝试访问的页面是默认站点的子文件夹中的.aspx,并且我们没有先决条件,也不能将验证更改为默认站点.

我知道很多其他人在互联网上也有类似的问题.

而且,我们开发的应用程序不应该使用Web视图.

任何关于如何解决这个问题的建设性指针将受到高度评价.提前致谢.

更新:我们现在更改了服务以执行基本和ntlm身份验证.

当我们运行下面的代码到本地主机测试服务器时,我们得到了正确的响应,localhost没有任何类型的身份验证机制.答复如下:

<soap:Body>
<FooResponse xmlns="uri:FlexAPI">
<FooResult>
<typeFooBar>
<FooNumber>4545</FooNumber>
<BarNumber>1</BarNumber>
</typeFooBar>
</FooResult>
</FooResponse>
</soap:Body>

但是,当我们在我们的验证服务器上运行下面的代码时,我们得到这个.

org.xmlpull.v1.XmlPullParserException:expected:
START_TAG {http://schemas.xmlsoap.org/soap/envelope/}信封
(位置:java.io.InputStreamReader@4054b398中的START_TAG @ 2:44)

SoapObject request = new SoapObject(NAMESPACE,METHOD_NAME);



        request.addProperty("Foo",Bar.getText().toString());
        request.addProperty("Foo",Bar() );
        request.addProperty("Foo",Bar.getText().toString());



        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);


        envelope.dotNet = true;
        envelope.setOutputSoapObject(request);

        envelope.encodingStyle = "utf-8";
        envelope.implicitTypes = false;

        String myUrlz= "http://" + myUrl.getText().toString() +"/Foo/Bar.asmx"; 



        HttpTransportBasicAuth auth = new HttpTransportBasicAuth(myUrlz,"Foo","Bar");

        auth.debug = true;
try
{

auth.call(SOAP_ACTION,envelope); // Fails on this line. 
System.out.println("Dump" + auth.responseDump);


// all the other stuff.....


}
catch (FooException Bar)
{

                // ¯\_(ツ)_/¯

}

所以基本上,我们在访问受保护的服务时收到html响应而不是xml.是的,除了认证部分,本地服务和清晰的服务是完全一样的.

解决方法

简单的答案是否定的,在Android上没有NTLM的开箱即用的方法.

很长一段时间的答案是,使用Apache HttpClient将您自己的解决方案一起成功的尝试.请参阅以下链接

http://danhounshell.com/blog/android-using-ntlm-authentication-with-httpclient/
http://mrrask.wordpress.com/2009/08/21/android-authenticating-via-ntlm/

猜你在找的Android相关文章