Как создать аутентификацию NTLM с помощью дооснащения

С 23 класса Android sdk были исключены классы:

org.apache.http.auth.AuthScheme; org.apache.http.auth.AuthSchemeFactory; org.apache.http.impl.auth.NTLMScheme; org.apache.http.impl.auth.NTLMEngine; org.apache.http.impl.auth.NTLMEngineException; 

Как теперь разрешено в AD, с логином и паролем через модификацию? Там OKHttpklient может быть через заголовки?

Я нашел ответ на github okhttp . Он был опубликован SelvinPL .

Сначала вам нужно реализовать NTLM-аутентификатор (он использует NTLMEngineImpl, автономную версию org.apache.http.impl.auth.NTLMEngineImpl , которая также была создана SelvinPL ). Нижеприведенный код представляет собой слегка измененную версию реализации SelvinPL , предназначенную для запуска в последней версии модификации (2.1.0).

 private static class NTLMAuthenticator implements Authenticator { final NTLMEngineImpl engine = new NTLMEngineImpl(); private final String domain; private final String username; private final String password; private final String ntlmMsg1; private NTLMAuthenticator(String username, String password, String domain) { this.domain = domain; this.username = username; this.password = password; String localNtlmMsg1 = null; try { localNtlmMsg1 = engine.generateType1Msg(null, null); } catch (Exception e) { e.printStackTrace(); } ntlmMsg1 = localNtlmMsg1; } @Override public Request authenticate(Route route, Response response) throws IOException { final List<String> WWWAuthenticate = response.headers().values("WWW-Authenticate"); if (WWWAuthenticate.contains("NTLM")) { return response.request().newBuilder().header("Authorization", "NTLM " + ntlmMsg1).build(); } String ntlmMsg3 = null; try { ntlmMsg3 = engine.generateType3Msg(username, password, domain, "android-device", WWWAuthenticate.get(0).substring(5)); } catch (Exception e) { e.printStackTrace(); } return response.request().newBuilder().header("Authorization", "NTLM " + ntlmMsg3).build(); } } 

Затем вы можете зарегистрировать аутентификатор, как в этом примере:

 OkHttpClient client = new OkHttpClient.Builder() .authenticator(new NTLMAuthenticator(username, password, domain)) .build(); Retrofit retrofit = new Retrofit.Builder() .baseUrl(getURL(context)) .addConverterFactory(GsonConverterFactory.create()) .client(client) .build(); return retrofit.create(Api.class); 

Он работает для com.squareup.retrofit2: дооснащение: 2.1.0.