Поддерживает ли веб-сервис Navision (2009) аутентификацию в удаленной базе данных?

В настоящее время я пытаюсь развернуть веб-сервис Navision (из Dynamics Navision 2009) и обнаружил, что веб-сервис аутентифицируется при подключении к локальной базе данных Navision SQL, но НЕ удаленной базе данных Navision SQL.

Итак, у нас есть серверы S (с полной установкой Navision) и W (с установленными только службами). Файл CustomSettings.config в этих двух системах идентичен, за исключением того, что S ссылается на localhost:

<add key="DatabaseServer" value="127.0.0.1"></add>
<add key="ClientCredentialType" value="Windows"></add>

W ссылки S:

<add key="DatabaseServer" value="S"></add>
<add key="ClientCredentialType" value="Windows"></add>

(Прочие детали опущены.) Сам веб-сервис работает от имени одного и того же пользователя домена в обоих случаях, и этот пользователь аутентифицирован в Navision.

Когда я подключаюсь к веб-службе, запущенной на S, аутентификация работает, и служба работает как обычно:

http://S:7047/DynamicsNAV/WS/Company/Codeunit/RLIntegartion

Я опущу здесь фактический результат. При подключении через W:

http://W:7047/DynamicsNAV/WS/Company/Codeunit/RLIntegartion

веб-сервис вместо этого возвращает XML, указывающий на сбой аутентификации:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Body>
    <s:Fault>
      <faultcode xmlns:a="urn:microsoft-dynamics-schemas/error">
        a:Microsoft.Dynamics.Nav.Types.NavDatabasePasswordException
      </faultcode>
      <faultstring xml:lang="en-US">
        The login failed when connecting to SQL Server S.
      </faultstring>
      <detail>
        <string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">
          The login failed when connecting to SQL Server S.
        </string>
      </detail>
    </s:Fault>
  </s:Body>
</s:Envelope>

Я могу настроить соединение ODBC на W с базой данных Navision на S, и соединение будет успешным и аутентифицируется правильно, поэтому фактическое соединение с базой данных и аутентификация кажутся нормальными.

Я знаю, что к самому веб-сервису обычно требуется доступ локально, чтобы любые записанные файлы можно было прочитать из того места, где их написал веб-сервис Navision, но из того, что я могу сказать в документации, веб-сервис может законно обращаться к базе данных с отдельного сервера. . Однако на практике (как указано выше) это не работает.

Это ограничение, которое накладывает Navision? Если нет, есть ли у кого-нибудь предложения относительно того, почему веб-сервис не может пройти аутентификацию при доступе к удаленной базе данных, когда тот же веб-сервис успешно работает локально?

Или это ограничение, наложенное программистами codeunit? Я разговаривал с ними, и они указывают, что это должно сработать, но очевидно, что это не так.


person Ronny    schedule 27.07.2016    source источник


Ответы (2)


Это известная проблема Nav 2009. В более поздних версиях работает без дополнительных ухищрений. Чтобы решить эту проблему, вам необходимо создать SPN.

Мне лично не удавалось установить его должным образом, поэтому я просто всегда устанавливал уровень веб-сервисов на одном сервере с SQL. В этом случае это работает.

person Mak Sim    schedule 27.07.2016
comment
МакSим прав, вам нужны SPN: social.technet.microsoft.com/wiki/contents/articles/ - person azatoth; 27.07.2016
comment
Я настроил SPN в соответствии со статьей Technet, но все равно получил ошибку аутентификации. Думаю, мне просто придется жить с запуском IIS на SQL-сервере. (Не требуется для самой веб-службы, но требуется для веб-службы, которая ее использует.) Нам просто нужно заблокировать доступ к IIS, чтобы ограничить доступ хостами, отличными от сервера, требующего доступа. Тем не менее, спасибо за совет. - person Ronny; 02.08.2016

В этой схеме есть три участника - БД, веб-сервис и клиент (который подключается к этому сервису). Проблема возникает только тогда, когда все эти три участника находятся на трех разных машинах.

Эта установка с тремя машинами будет работать только в том случае, если выполнены следующие требования: 1) ваш клиент может использовать аутентификацию Kerberos (например, приложения Internet Explorer или .NET могут, но приложения Chrome или PHP нет) 2) вы настроили NAV чтобы использовать аутентификацию Kerberos (в отличие от NTLM), и вы настраиваете делегирование.

Делегирование - это процесс, который позволяет серверу NAV (или веб-службе) принять билет проверки подлинности, полученный от клиента, и передать его SQL Server. Вам необходимо явно разрешить это в настройке Active Directory. Для этого вам понадобятся SPN - они в основном описывают субъекты, которые участвуют в этом делегировании.

Вы можете обратиться к этим руководствам, чтобы настроить все это:

Пошаговое руководство MSDN: установка Три уровня на трех компьютерах

MSDN Как: настроить веб-интерфейс Услуги с делегированием

Веб-службы NAV 2009 на трех машинах

Вы также можете вернуться к более простой настройке с использованием настройки с двумя машинами. В этом случае либо сервер NAV и сервер SQL должны находиться на одном компьютере, либо сервер NAV и клиент веб-службы должны находиться на одном компьютере. В качестве примера последнего вы можете создать небольшую настраиваемую веб-службу, которая действует как прокси для ваших вызовов, и опубликовать ее на том же компьютере, что и сервер / веб-служба NAV.

person sergeyol    schedule 28.07.2016