【问题标题】:Cannot authorize to WCF Basic Authentication Web Service from JMeter无法从 JMeter 授权 WCF 基本身份验证 Web 服务
【发布时间】:2017-07-07 08:53:13
【问题描述】:

我正在使用 JMeter 对具有基本身份验证的 WCF Web 服务运行测试,该服务正在运行并且凭据正确(我从 SOAPUI 成功运行它们)。

根据我的所有研究,我已经配置了“HTTP 标头管理器”和“HTTP 基本身份验证”,并且在提交时我看不到实际的 HTTP 标头有任何问题:

到目前为止我做了什么:

在对 SOAPAction 进行一些操作后,我将其与有效的 SOAPUI 对齐,但 JMeter 基本身份验证仍然失败:

HTTP 响应如下,但它是标准的(当我故意输入错误的凭据时,我从 SOAPUI 得到这个)

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><s:Fault><faultcode xmlns:a="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">a:InvalidSecurity</faultcode><faultstring xml:lang="en-ZA">An error occurred when verifying security for the message.</faultstring></s:Fault></s:Body></s:Envelope>

我在下面包含了使用标准 basicHttpsBinding(不是 wsHttpBinding)的绑定配置:

<service name="PayM8.Axis.PaymentsService.V1.HyperLink.HyperLinkService">
        <endpoint address="" binding="basicHttpsBinding" bindingConfiguration="DefaultHttpsBinding"
          contract="PayM8.Axis.PaymentsService.V1.HyperLink.IHyperLinkService"/>
</service>

<basicHttpsBinding>
    <binding name="DefaultHttpsBinding" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647">
      <security mode="TransportWithMessageCredential">
        <transport clientCredentialType="Basic" />
      </security>
    </binding>
</basicHttpsBinding>

知道我的 JMeter 基本身份验证 HTTP 请求可能有什么问题吗?

【问题讨论】:

    标签: web-services wcf jmeter basic-authentication


    【解决方案1】:

    Web 服务可能有不同的身份验证类型,您得到的错误是关于缺少或不正确的 WS-Security 标头。

    有多种方法可以将请求头添加到请求中,您可以尝试使用支持某些身份验证类型的JMeterSoapPlugin

    您还可以查看Take the Pain out of Load Testing Secure Web Services,了解如何绕过不同类型的 Web 服务身份验证。

    【讨论】:

    • 感谢您指出这一点,如果我们使用 wsHttpBinding's 但它使用标准的 basicHttpsBinding 肯定会有意义(使用设置更新了问题)。我们在服务器上还有其他一些使用 wsHttpBinding 的服务,所以为了安全起见,我也禁用了它们,但没有任何变化,它仍然返回完全相同的错误。
    • 我同意 Dmitri,我们正在使用 WS 安全,因为它的安全模式是 [TransportWithMessageCredential]。自定义用户名和密码验证器无法在“TransportCredentialOnly”(使用 Windows 身份验证的 IIS 级基本身份验证)上工作。 JMeter 插件对我不起作用(尝试了几个,包括提供的一个),但将发布我如何通过在 HTTP 有效负载中包含 WS 标头来使 WS JMeter 帖子工作。感谢您的解释,它帮助我指明了正确的方向。
    【解决方案2】:

    简而言之,正如 Dmitri 提到的,我们正在使用 WS Security,当您配置如下安全模式时启用此功能(在 BasicHttpBindings 和 wsHttpBinding 下)

    <security mode="TransportWithMessageCredential">
    

    通常基本身份验证使用 HTTP 标头添加以下内容:

    授权:基本 QWxhZGRpbjpPcGVuU2VzYW1l

    当使用WS Security 时,用户名和密码包含在 SOAP 负载本身中。当我在 JMeter HTTP 请求的 HTTP 正文数据中添加对象时,它工作正常。

    有用的工具,如果您不想弄清楚 wsse:security 对象的内容,我建议使用 SOAPUI 将其发送出去,然后从 SOAPUI 日志中获取格式化的对象。记得将 WSS-Password Type 设置为 PasswordText。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-10
      • 2014-02-10
      • 2013-05-18
      • 1970-01-01
      • 2012-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多