401 - Несанкционированный: доступ запрещен из-за неверных учетных данных - NTLM-аутентификация - PullRequest
0 голосов
/ 07 ноября 2019

Я создаю клиент веб-службы Java для веб-службы на основе SOAP. мой URL-адрес https://uat -opus.lmig.com / PublishingWS / PublishingWebService.asmx . Я создал клиента в затмении (клиент Оси). и попытался вызвать веб-сервис с сгенерированным прокси-классом. после звонка я получаю 401 - Несанкционированный: доступ запрещен из-за неверных учетных данных. Я не уверен, почему эта ошибка появляется после правильного ввода учетных данных. это веб-служба dot Net, использующая NTLM для авторизации.

я добавил свои учетные данные только в сгенерированный файл-заглушку: -

_call.setProperty("Domain", "Domain");

        _call.setUsername("username");
        _call.setPassword("password");

        _call.setProperty("Authorization Type", "NTLM/Kerberos");

ниже генерируется код класса заглушки, в который я добавил учетные данныевручную.

public byte[] createAndReturnDocument(java.lang.String jobXML) throws java.rmi.RemoteException {
        if (super.cachedEndpoint == null) {
            throw new org.apache.axis.NoEndPointException();
        }
        org.apache.axis.client.Call _call = createCall();
        _call.setOperation(_operations[2]);
        _call.setUseSOAPAction(true);
        _call.setSOAPActionURI("http://tempuri.org/CreateAndReturnDocument");
        _call.setEncodingStyle(null);
        _call.setProperty(org.apache.axis.client.Call.SEND_TYPE_ATTR, Boolean.FALSE);
        _call.setProperty(org.apache.axis.AxisEngine.PROP_DOMULTIREFS, Boolean.FALSE);
        _call.setSOAPVersion(org.apache.axis.soap.SOAPConstants.SOAP11_CONSTANTS);
        _call.setOperationName(new javax.xml.namespace.QName("http://tempuri.org/", "CreateAndReturnDocument"));
       // _call.setProperty(USERNAME_PROPERTY, "username");
        //_call.setProperty(PASSWORD_PROPERTY,"password");
        _call.setProperty("Domain", "Domain");

        _call.setUsername("username");
        _call.setPassword("password");

        _call.setProperty("Authorization Type", "NTLM/Kerberos");

        setRequestHeaders(_call);
        setAttachments(_call);
 try {        java.lang.Object _resp = _call.invoke(new java.lang.Object[] {jobXML});

        if (_resp instanceof java.rmi.RemoteException) {
            throw (java.rmi.RemoteException)_resp;
        }
        else {
            extractAttachments(_call);
            try {
                return (byte[]) _resp;
            } catch (java.lang.Exception _exception) {
                return (byte[]) org.apache.axis.utils.JavaUtils.convert(_resp, byte[].class);
            }
        }
  } catch (org.apache.axis.AxisFault axisFaultException) {
  throw axisFaultException;
}
    }

Это должно дать мне массив байтов и возможность авторизации моих учетных данных. я не уверен, как разрешить проверку подлинности на основе NTLM

...