SOAP API Workday: как пройти аутентификацию
Я новичок в мыло api рабочего дня, и я пытаюсь выяснить, как отправить запрос мыла для аутентификации с использованием SOAPUI. Любые предложения будут ценны.
5 ответов
Не уверен, что именно вы имеете в виду. Вы аутентифицируетесь неявно - отдельного запроса нет. Документация Workday API опубликована здесь. Вы должны прочитать это. Когда вы импортируете WSDL, например, в решение.Net, он предоставит вам доступ к различным классам API.
Например, чтобы подключиться к API компенсации из задачи сценария служб SSIS, я использую следующее:
// Instantiate and configure compensation client
CompensationPortClient compClient = // I use custom binding - gives me more control
new CompensationPortClient(CompensationObjectFactory.getWorkdayBinding(),
new EndpointAddress(endpointURL));
compClient.ClientCredentials.UserName.UserName = userName;
compClient.ClientCredentials.UserName.Password = password;
(Я создал CompensationObjectFactory для создания экземпляров всех объектов API на стороне клиента, потому что процесс несколько формульный.) Затем вы можете выполнять вызовы API с помощью объекта client, например, запросить одноразовое вознаграждение:
Request_OneTime_Payment_RequestType request =
CompensationObjectFactory.getOneTimePaymentRequest(
CompensationObjectFactory.getBusinessProcessParameters(),
CompensationObjectFactory.getOneTimePaymentData(
planId, currency, amount, effDt, emplID, positionID));
Request_OneTime_Payment_ResponseType response =
compClient.Request_OneTime_Payment(request);
API рабочего дня используют WS-Security для аутентификации.
Помните, что хозяин рабочего дня является мультитенантным. Таким образом, вы будете использовать конечную точку WSDL для подключения к нужному серверу, а поле имени пользователя будет содержать как ваше имя пользователя, так и владельца этого сервера.
Формат имени пользователя для SOAP Auth to Workday: [user-name]@[tenant-name]
Пример: youUserName@tenant6
Ваша учетная запись рабочего дня также должна быть в группе Integration Developer.
Вам может потребоваться настроить безопасность и разрешения помимо этого, чтобы разрешить доступ к определенным функциональным группам и доменам, которые относятся к веб-службе.
Если вы используете SoapUI, сделайте следующее:
- Импортируйте WSDL в проект.
- В "Привязке интеграции" перейдите в настройки.
- На вкладке "Конечные точки службы" задайте имя пользователя, как описано выше.
- Установите пароль для вашего пароля в арендаторе.
- Тип WSS должен быть установлен на PasswordText.
Теперь вы можете сделать запрос.
Я наконец понял это после отладки рабочего примера SOAP UI, установив wireshark и форсировав мой запрос по HTTP!
Ранее опубликованный пример заголовка не работал для меня, потому что в нем отсутствовала некоторая информация. Далее я заметил, что мой захваченный заголовок работал несколько часов спустя, и я разработал теорию, что Workday игнорирует все, кроме имени пользователя и пароля. Итак, я проверил следующее, и это сработало:
<soapenv:Header>
<wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="bogus">
<wsse:Username>user@tenant</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">[PASSWORD HERE]</wsse:Password>
<wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">bogus</wsse:Nonce>
<wsu:Created>2000-10-02T21:12:28.365Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
</soapenv:Header>
Желаем удачи, если вы читаете это. SOAP - это полный кошмар!
Чтобы добавить к ответам уже здесь, вам может понадобиться добавить свои учетные данные в заголовок SOAP, например, так:
<soapenv:Header>
<wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="bogus">
<wsse:Username>[user]@[tenant]</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">[PASSWORD HERE]</wsse:Password>
<wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">bogus</wsse:Nonce>
<wsu:Created>2000-10-02T21:12:28.365Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
</soapenv:Header>
Изменение «Свойства запроса» сработало для меня. Имя пользователя
[user-name]@[tenant-name]
как упоминалось в ответе @dbh
Скриншот: