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

Скриншот:

Другие вопросы по тегам