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

Posted

技术标签:

【中文标题】Workday SOAP API:如何进行身份验证【英文标题】:Workday SOAP API : How to authenticate 【发布时间】:2015-01-23 18:47:32 【问题描述】:

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

【问题讨论】:

SOAP 与 WDSL 一起使用,您应该能够看到如何使用那里的定义创建消息,考虑使用 SOAPUI 导入它,自动创建存根。 在这里查看我的答案:***.com/questions/31684340/…。这就是您可以在 SoapUI 和其他人中使用的信封。 有人知道 Workday 是否支持使用 REST API 进行身份验证? 【参考方案1】:

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

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

SOAP Auth to Workday 的用户名格式: [user-name]@[tenant-name]

例如:youUserName@tenant6

您的工作日帐户也需要在集成开发人员组中。

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

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

将 WSDL 导入到项目中。 在“集成绑定”中,转到设置。 在“服务端点”选项卡上,按照我上面的描述设置用户名。 将密码设置为租户中的密码。 应将 WSS-Type 设置为 PasswordText。

现在,您可以提出请求了。

【讨论】:

我在 SOAP UI 5.2.0 的集成绑定中没有设置选项。我可以在每个请求上将其设置为用户名、密码,然后将 WSS-PasswordType 设置为 PasswordText。我希望有一种方法可以为导入的 WSDL 中的所有对象设置它。 看起来我做对了,但我错过了如何在 Workday 为我的用户设置安全性以允许我的帐户进行 SOAP 调用。 虽然此答案中的前提仍然正确,但在较新的 SoapUI 版本中,WS-Security 配置已移动。有关这方面的更多详细信息,请参阅soapui.org/docs/soapui-projects/ws-security。 我不再参与工作日,但欢迎 @esqew 的更新。泰!很高兴人们发现这个问题和答案很有帮助 @0andriy 您需要授予一些权限才能访问某些域/API 区域,作为您的常规用户帐户,然后才能访问任何工作日 API。【参考方案2】:

不确定您指的是什么。您隐式地进行身份验证 - 没有单独的请求。 Workday API 文档是published here。你应该阅读它。当您导入 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);

【讨论】:

【参考方案3】:

在通过安装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>

如果您正在阅读本文,祝您好运。 SOAP 是一场彻头彻尾的噩梦!

【讨论】:

【参考方案4】:

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

【讨论】:

以上是关于Workday SOAP API:如何进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章

Workday soap api - Get_Candidates 操作

Workday - SOAP API - Create_Requisition_Request SOAP 负载

Five9 的 API:如何使用 SOAP API 和基本身份验证提取报告

Workday - 设置 OAuth 客户端

对 Web 服务进行身份验证的最佳方式是啥

通过身份验证标头 API WCF Soap C# .Net