Workday SOAP API:如何进行身份验证

Workday SOAP API:如何进行身份验证,soap,workday-api,Soap,Workday Api,我是workday soap api的新手,我正试图弄清楚如何发送soap请求以使用SOAPUI进行身份验证。 如果您有任何建议,我们将不胜感激。不确定您指的是什么。您隐式地进行身份验证—没有单独的请求。Workday API文档是。你应该读一读。当您导入WSDL时,例如在.Net解决方案中,它将允许您访问各种API类 例如,要从SSIS脚本任务连接到补偿API,我使用以下命令: // Instantiate and configure compensation client Compensat

我是workday soap api的新手,我正试图弄清楚如何发送soap请求以使用SOAPUI进行身份验证。
如果您有任何建议,我们将不胜感激。

不确定您指的是什么。您隐式地进行身份验证—没有单独的请求。Workday API文档是。你应该读一读。当您导入WSDL时,例如在.Net解决方案中,它将允许您访问各种API类

例如,要从SSIS脚本任务连接到补偿API,我使用以下命令:

// 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调用,例如,查询一次性奖励:

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);

Workday API使用WS-Security进行身份验证

请记住,workday主机是多租户的。因此,您将使用WSDL端点连接到正确的服务器,用户名字段将包含您的用户名和该服务器上的租户

SOAP验证到Workday的用户名格式:
[用户名]@[租户名称]

示例:
youUserName@tenant6

您的workday帐户也需要位于Integration Developer的组中

您可能需要调整安全性和权限,以允许访问与web服务相关的某些功能组和域

如果您使用的是SoapUI,请执行以下操作:

// 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;
  • 将WSDL导入到项目中
  • 在“集成绑定”中,转到设置
  • 在“服务端点”选项卡上,设置用户名,如上所述
  • 将密码设置为租户中的密码
  • WSS类型应设置为PasswordText

现在,您可以发出请求。

要添加到此处已有的响应,您可能还需要在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>

[用户]@[租户]
[此处密码]
伪造的
2000-10-02T21:12:28.365Z

通过安装wireshark并通过HTTP强制我的请求,在调试了一个正常工作的SOAP UI示例后,我终于解决了这个问题

之前发布的标题示例对我不起作用,因为它缺少一些信息。我进一步注意到,我捕获的标题在几个小时后起作用,我发展出一种理论,即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>

user@tenant
[此处密码]
伪造的
2000-10-02T21:12:28.365Z

如果你正在读这篇文章,祝你好运。肥皂简直是一场噩梦

SOAP与WDSL一起工作,您应该能够看到如何使用那里的定义创建消息,考虑使用SOAPUI导入它,从而自动创建存根。请在这里检查我的答案:这就是您可以在SoapUI和其他应用程序中使用的信封。有人知道Workday是否支持使用REST API进行身份验证吗?我在SoapUI 5.2.0的集成绑定中没有设置选项。我可以在每个请求中将其设置为用户名、密码,然后将WSS PasswordType设置为PasswordText。我希望有一种方法可以为导入的WSDL中的所有对象设置它。看起来我做对了,但我不知道如何在Workday为我的用户设置安全性,以允许我的帐户进行SOAP调用。虽然这个答案中的前提仍然正确,但在更新版本的SoapUI中,WS-security配置已经改变。请参阅了解更多详细信息。我不再参与workday,但欢迎@esqew更新。泰!很高兴人们找到了这个问题和答案helpful@0andriy在您可能访问任何workday API之前,您需要获得一些权限才能访问某些域/API区域(作为您的常规用户帐户)。