|
|
#1 |
|
Участник
|
Web services и SOAP
Всем привет.
Есть задача: с публичного портала дергать аксаптовый веб-сервис. Ax 2012 R2, Windows Server 2008. Проблема вкратце – на тестовом примере удалось обратиться к веб-сервису из VS2010, но не удалось через SOAP, возникли проблемы аутентификации пользователя на АОС-е. Причины не понятны. Тестовое окружение: 1) на одной машине установлены AOS и IIS 2) Web services on IIS установлены на дефолтный веб сайт (Default Web Site). 3) На форме Services and Application Integration Framework\Веб-сайты по соответствующему сайту проверка ошибок не выдает 4) Для Identity application pool сайта и соответствующего application для web services выбрана определенная доменная учетная запись 5) Аутентификация Default Web Site – anonymous 6) Аутентификация application для web services – windows (пробовал и с Basic аутентификацией) Создан простенький кастомный сервис, в классе единственный метод: Код: [SysEntryPointAttribute(false),
AifCollectionTypeAttribute('_flag', Types::String)]
public void setFlags(str _flag)
{
Table1 Table1;
;
Table1.Field1 = _flag;
Table1.insert();
}
Для проверки вызова сервиса в VS 2010 создан проект типа windows form application. Сервис добавлен в ссылки (при этом были запрошены реквизиты пользователя). В проекте форма с одной кнопкой, при нажатии которой работает код: Код: private void button1_Click(object sender, EventArgs e)
{
MyService.DyalServiceClient proxy = new MyService.DyalServiceClient();
;
try
{
MyService.CallContext context = new MyService.CallContext();
context.Company = "rus";
proxy.setFlags(context, "Ura");
MessageBox.Show("yes");
}
catch (Exception ex)
{
throw ex;
}
}
Код: Object Server 01: An error has occurred in the services framework. Method: AifMessageInspector::AfterReceiveRequest. Error: System.Security.SecurityException: Logon failure: unknown user name or bad password. at System.Security.Principal.WindowsIdentity.KerbS4ULogon(String upn, SafeTokenHandle& safeTokenHandle) at System.Security.Principal.WindowsIdentity..ctor(String sUserPrincipalName, String type) at System.Security.Principal.WindowsIdentity..ctor(String sUserPrincipalName) at Microsoft.Dynamics.Ax.Services.AxSessionInitBehavior.getUserSid(String logonAsUser) at Microsoft.Dynamics.Ax.Services.AxServiceOperationContext.InitializeSession() at Microsoft.Dynamics.Ax.Services.AxServiceOperationContext.InitializeContext() at Microsoft.Dynamics.Ax.Services.AxServiceOperationContext.Attach(OperationContext owner) at System.ServiceModel.ExtensionCollection`1.InsertItem(Int32 index, IExtension`1 item) at System.Collections.Generic.SynchronizedCollection`1.Add(T item) at Microsoft.Dynamics.Ax.Services.AifMessageInspector.AfterReceiveRequest(Message& request, IClientChannel channel, InstanceContext instanceContext) The Zone of the assembly that failed was: MyComputer Код: An account failed to log on.
Subject:
Security ID: RU\SPO
Account Name: spo
Account Domain: RU
Logon ID: 0x1dce2
Logon Type: 3
Account For Which Logon Failed:
Security ID: NULL SID
Account Name:
Account Domain:
Failure Information:
Failure Reason: Unknown user name or bad password.
Status: 0xc000006d
Sub Status: 0xc0000064
Process Information:
Caller Process ID: 0xce4
Caller Process Name: E:\Program Files\Microsoft Dynamics AX\60\Server\MicrosoftDynamicsAX\bin\Ax32Serv.exe
Network Information:
Workstation Name: RUAXDEV04
Source Network Address: -
Source Port: -
Detailed Authentication Information:
Logon Process: C
Authentication Package: Kerberos
Transited Services: -
Package Name (NTLM only): -
Key Length: 0
|
|
|
|
|
#2 |
|
Участник
|
Тут бы не помешал кусок config'а сервиса и веб-приложения в части настройки binding'а.
|
|
|
|
|
#3 |
|
Участник
|
вот, пожалуйста, значимый кусок файла конфигурации моей службы:
Код: <bindings>
<basicHttpBinding>
<bindingname="basicHttpBindingWithWindowsAuth">
<securitymode="TransportCredentialOnly">
<transportclientCredentialType="Windows" />
</security>
</binding>
<bindingname="basicHTTPBindingWithBasicAuth"bypassProxyOnLocal="false">
<securitymode="TransportCredentialOnly">
<transportclientCredentialType="Basic" />
</security>
</binding>
<bindingname="NoSecurity" />
</basicHttpBinding>
<netTcpBinding>
<bindingname="DefaultServiceGroupBinding"closeTimeout="00:05:00"
openTimeout="00:05:00"receiveTimeout="00:10:00"sendTimeout="00:05:00"
transactionFlow="false"transferMode="Buffered"transactionProtocol="OleTransactions"
hostNameComparisonMode="StrongWildcard"listenBacklog="10"maxBufferPoolSize="524288"
maxBufferSize="81920000"maxConnections="10"maxReceivedMessageSize="81920000">
<readerQuotasmaxDepth="32000000"maxStringContentLength="81920000"
maxArrayLength="163840000"maxBytesPerRead="4096000"maxNameTableCharCount="16384000" />
<reliableSessionordered="true"inactivityTimeout="00:10:00"
enabled="false" />
<securitymode="Transport">
<transportclientCredentialType="Windows"protectionLevel="EncryptAndSign" />
<messageclientCredentialType="Windows" />
</security>
</binding>
</netTcpBinding>
<wsHttpBinding>
<bindingname="wsHttpBindingWithWindowsAuth">
<securitymode="TransportWithMessageCredential">
<transportclientCredentialType="Windows">
<extendedProtectionPolicypolicyEnforcement="Always"protectionScenario="TransportSelected" />
</transport>
<messageclientCredentialType="Windows" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<services>
<servicebehaviorConfiguration="routingData"name="System.ServiceModel.Routing.RoutingService">
<endpointaddress=""binding="basicHttpBinding"bindingConfiguration="basicHttpBindingWithWindowsAuth"
name="reqReplyEndpoint"contract="System.ServiceModel.Routing.IRequestReplyRouter" />
</service>
</services>
|
|
|
|
|
#4 |
|
Участник
|
Я немного поэксперементировал с файлом конфигурации - механизм обеспечения безопасности ставил в none. Ничего не менялось. Полагаю, что проблема где-то рядом с Kerberos (которого у меня вроде бы нет) и SPN
Detailed Authentication Information: Logon Process: C Authentication Package: Kerberos Transited Services: - Package Name (NTLM only): - Key Length: 0 System.Security.Principal.WindowsIdentity.KerbS4ULogon(String upn, SafeTokenHandle& safeTokenHandle) |
|
|
|
|
#5 |
|
Участник
|
Эти параметры меняли -
Authenticating-soap-requests ? Не знаю как у вас, а у меня функции (operation contracts) для AX сервиса не отображаются в soapUI. Тоесть не так как ТУТ. Может правда я чего намудрил - установил 5 минут назад. При этом функции из самописного WCF видены. Мы для внешнего доступа к AX портам используем промежуточный WCF в котором AX WCF сервис добавлен в Service Reference.
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0 |
|
|
|
|
#6 |
|
Модератор
|
Цитата:
__________________
-ТСЯ или -ТЬСЯ ? |
|
|
|
| За это сообщение автора поблагодарили: Logger (3), alex55 (1), Kabardian (2). | |
|
|
#7 |
|
Участник
|
Вчера понадобилость протестировать стандартный AIF WCF service через SoapUI, и я тоже наткнулся на проблему с аутентификацией. Попробовал разные варианты (менял аутентификацию на Basic, NTML, активация Basic aut в IIS, танцы с бубном и т.п.). Не помогло.
В итоге, наткнулся на обсуждение на форуме тут, что у SoapUI некие проблемы с аутентификацией с сервисами ахапки. Поставил Burp Suite, настроил прокси на адрес веб сервиса, указал пользователя, пароль, настроил прокси в SoapUI, и все заработало на стандартном сервисе ахапки. В итоге, в самом soap'e никакие данные пользователя не указываю, все идет через прокси. Тестировал на стандартной VPC AX 2012 R3 CU8, на которой развернуты IIS и сервисы. SoapUI стоит на локальном компе, с которого я и коннектился на виртуалку. Последний раз редактировалось Sergey Vlasov; 26.03.2015 в 12:51. Причина: bugs fixing |
|
|
|
| За это сообщение автора поблагодарили: Maxim Gorbunov (5), gl00mie (2). | |
|
|
#8 |
|
Участник
|
Спустя много лет в soupui проблема так и осталась.
Нашел выход с переключением режимов входа. https://community.smartbear.com/t5/S.../202476#M30582 |
|
|
|
| За это сообщение автора поблагодарили: Logger (1). | |
|
|
#9 |
|
Участник
|
Цитата:
Сообщение от dmitrybarynov
Спустя много лет в soupui проблема так и осталась.
Нашел выход с переключением режимов входа. https://community.smartbear.com/t5/S.../202476#M30582 Проблема с сервисами (401) работает без проблем |
|
|
|
|
#10 |
|
Участник
|
Я в soapui подключал сервисы не по ссылке на wsdl, а использовал непосредственно сам wsdl.
Но всё равно это неудобно. Для быстрого тестирования какой-нибудь функции вебсервиса удобнее использовать WcfStorm. Там нет танцев с бубном при создании референса на сервис.
__________________
Дмитрий |
|
|
| Теги |
| ax2012r3, soap, wcf, web сервис, webservice, веб-сервис |
|
|
|