有没有从Android应用程序处理Windows集成(NTLM)身份validation的可靠方法?

正如标题所述,我们正在寻找一种访问Windows集成(NTLM)身份validation背后的.NET 3.5 Web服务的方法。

我们已经search了整整一周的互联网和这个论坛,我们还没有find解决这个问题的方法。

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

但是我们尝试authentication我们自己,我们遇到这些:

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身份validation设置如下: 在这里输入图像说明

我们试图访问的页面是默认站点的子文件夹中的一个.aspx文件,我们没有previliges,也没有安全的将身份validation更改为默认站点。

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

此外,我们正在开发的应用程序不应该使用networking视图。

任何有关如何解决这个build设性的指针将高度赞赏。 提前致谢。




更新:我们现在已经改变了服务来执行basic和ntlm身份validation。

当我们将下面的代码运行到本地主机testing服务器时,我们得到了正确的响应,本地主机没有任何种类的authentication机制。 答复如下:

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

然而 ,当我们在我们的authentication服务器上运行下面的代码时,我们得到了这个。

org.xmlpull.v1.XmlPullParserException:expected:START_TAG { http://schemas.xmlsoap.org/soap/envelope/ } Envelope(position:START_TAG @ 2:44 in java.io.InputStreamReader@4054b398)

  SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); request.addProperty("Foo", Bar.getText().toString()); 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。 是的,本地主机服务和尖锐的服务除了authentication部分完全一样。

Solutions Collecting From Web of "有没有从Android应用程序处理Windows集成(NTLM)身份validation的可靠方法?"

简短的回答是不,对于android上的NTLM没有开箱即用的方法。

漫长的回答是,已经成功地尝试使用Apache HttpClient将自己的解决scheme整合在一起。 请参阅以下链接:

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

Android设备无法为不属于它的Windows域使用有效的NTLM令牌。

您唯一的select是将服务器上的身份validation机制更改为更合适的方式。 如果您需要限制对页面的访问,以下是一些可用的选项:

  • 基本authentication(通过http或https)
  • 基于表单的authentication(通过http或https)
  • https与SSL证书authentication(在Android应用程序和服务器端 )
  • Oauth的公共页面(通过http或hhtps)
  • 使用OpenID的公共页面(通过http或hhtps)