Java-версия HttpWebRequest seDefaultCredentials = true; - PullRequest
1 голос
/ 25 сентября 2019

В настоящее время я работаю над авторизацией прокси-сервера API Qlik с использованием Java.Для этого мне нужно пройти через несколько перенаправлений, а затем открыть WebSocket.У меня есть версия C #, которая выполняет задачу, но мне нужно перенести ее на Java.

В Java я могу завершить перенаправления и получить ключ сеанса для WebSocket, но не могу правильно настроить учетные данные NTLM, чтобы WebSocket мог их принять.

В настоящее время я использую HTTP-клиент Apache v 4.5.И nv-websocket-клиент для WebSocket.

https://hc.apache.org/httpcomponents-client-4.5.x/index.html

https://github.com/TakahikoKawasaki/nv-websocket-client

В Java я создал объект учетных данных и установил учетные данные NTLM для запроса https.

Проблема в том, что в C # вызов WebSocket, кажется, автоматически принимает запрос.UseDefaultCredentials = true;.

Мой вопрос, есть ли способ получить такую ​​же функциональность в Java?или библиотека, которая поддерживает функции.Или, если кто-то использовал Java для выполнения этой задачи, было бы замечательно.

Я попытался настроить заголовки для запроса WebSocket, чтобы отразить запрос NTLM, но я не совсем уверен, куда идти дальше.Ниже приведена настройка c #, которую я ищу, чтобы выполнить ту же задачу.

HttpWebRequest request = (HttpWebRequest) WebRequest.Create(URI);  
request.Headers = headers;  
        request.Method = "GET";  
        request.Accept = "application/json";  
        request.Credentials = true;    
System.Net.CredentialCache.DefaultNetworkCredentials;  
        request.UseDefaultCredentials = true;  
        request.AllowAutoRedirect = false;  
        request.CookieContainer = new CookieContainer();   

В настоящее время я получаю:

webSocketFrame (FIN = 1, RSV1 = 0, RSV2 = 0, RSV3 = 0, код операции = TEXT, длина = 226, полезная нагрузка= "

{" jsonrpc ":" 2.0 ",
" method ":" OnAuthenticationInformation ",
" params ": {" loginUri ": baseurl + port" / internal_windows_authentication /? TargetId =Идентификатор, возвращенный здесь ",
" mustAuthenticate ": true}}")

Ответ, который я ищу:

webSocketFrame (FIN = 1, RSV1= 0, RSV2 = 0, RSV3 = 0, код операции = TEXT, длина = 226, полезная нагрузка = "{" jsonrpc ":" 2.0 ",
" method ":" OnAuthenticationInformation ",
" params ": {"loginUri": baseurl + port "/ internal_windows_authentication /? targetId = ID, возвращаемый здесь",
"mustAuthenticate": false}} ") <---- логический флаг изменен </p>

...