Как гласит заголовок, мы ищем способ доступа к веб-службе .NET 3.5, которая находится за встроенной аутентификацией Windows (NTLM).
Мы искали в интернете и на этом форуме всю эту неделю, и нам еще предстоит найти решение этой проблемы.
Мы пробовали, 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 в подпапке сайта по умолчанию, и у нас нет прав доступа, и при этом не безопасно сменить аутентификацию на сайт по умолчанию.
Я знаю, что у многих других в интернете есть похожие проблемы.
Кроме того, разрабатываемое нами приложение не должно использовать веб-представления.
Буду весьма признателен за любые конструктивные указания о том, как решить эту проблему. Заранее спасибо.
ОБНОВЛЕНИЕ: Мы изменили службу для выполнения базовой и 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: ожидается:
START_TAG {http://schemas.xmlsoap.org/soap/envelope/}Envelope
(позиция: START_TAG @ 2: 44 в 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 при доступе к защищенному сервису. И да, служба localhost и услуга sharp точно совпадают, за исключением части аутентификации.