Я установил службу SOAP на виртуальной машине под управлением Windows Server 2012 r2. Я закрепил его с помощью NTLM, и мне удалось получить к нему доступ с главного компьютера, используя SoapUI. До сих пор так хорошо ...Как отлаживать аутентификацию NTLM в Windows Server 2012 r2
Теперь я пытаюсь получить доступ к моей службе, все еще от хоста, но с помощью программы golang на этот раз. Я использую this library для этого (мне нужно было реализовать метод GenerateNegotiateMessage() и убедиться, что флаги Negotiate совпадают с флажками SoapUI).
Чтобы убедиться, что я сделал все правильно, я загрузил исходный код SoapUI и сравнил выходы (NegotiateMessage и AuthenticateMessage) моей программы golang и SoapUI. Если я исправляю входы (временная метка и случайный вызов клиента), я получаю одинаковые результаты. Тем не менее, когда я пытаюсь подключиться к службе, я получаю 401 с «Доступ лишен из-за недействительных учетных данных». Не нужно говорить, что я на 100% уверен, что учетные данные являются правильными, поскольку я могу получить доступ к службе с теми же учетными данными, используя SoapUI. Поэтому в моем коде go должно быть что-то не так. Но чтобы понять это, мне понадобится больше журналов с моего Windows Server. Любая идея, где я мог бы начать искать?
Ниже web.config моей службы Мыло:
<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true"/>
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.5"/>
<httpRuntime targetFramework="4.5"/>
<trace enabled="true" pageOutput="true" requestLimit="40" localOnly="false"/>
</system.web>
<system.serviceModel>
<diagnostics wmiProviderEnabled="true">
<messageLogging
logEntireMessage="true"
logMalformedMessages="true"
logMessagesAtServiceLevel="true"
logMessagesAtTransportLevel="true"
maxMessagesToLog="3000"
/>
</diagnostics>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="false"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<basicHttpBinding>
<binding>
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Ntlm" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
<directoryBrowse enabled="true"/>
</system.webServer>
<system.diagnostics>
<sources>
<source name="System.ServiceModel" switchValue="All" propagateActivity="true">
<listeners>
<add name="myListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="C:\logs\TextWriterOutput.log"/>
</listeners>
</source>
</sources>
</system.diagnostics>
</configuration>
Большое спасибо за вашу помощь!
Gpack, FYI [so] не является форумом, нежелательно «тегировать» заголовки на всех гораздо меньше [SOLVED]. Вместо этого наличие принятого ответа означает его «ответ» на показ и поиск. –
Понял. Сожалею... – Gpack