当摘要认证开启时,Gatling 测试失败
Posted
技术标签:
【中文标题】当摘要认证开启时,Gatling 测试失败【英文标题】:Gatling test fails when digest authentication on 【发布时间】:2015-07-08 08:39:33 【问题描述】:我最近开发了一个 SOAP Web 服务。 我开始在没有身份验证的情况下实现它。它运行良好:服务、带有 SOAP UI 的调用和 gatling 测试。
我添加了摘要式身份验证,现在我无法使我的 gatling 测试工作(使用 SOAP UI 的测试仍然成功)。
根据 gatling 文档 (here),我应该在我的 http 请求中调用 .digestAuth(login, pass)
:
val scn = scenario("scenario")
.feed(feeder)
.feed(feeder2)
.forever
exec(
http("myRequest")
.post(target)
.digestAuth("login","pass")
.body(ELFileBody("Request.wsdl"))
.headers(headers_2)
)
来自服务器的答案始终是 500 错误消息:
2015 年 7 月 7 日下午 4:27:31 com.sun.xml.wss.impl.SecurityRecipient processMessagePolicy SCHWERWIEGEND:WSS0253:消息不符合配置的策略:在消息中找不到安全标头
更新:
我正在使用最新版本的 gatling 2.1.6
我无法共享我的网络服务,但这是它的配置方式。
spring-servlet.xml
<sws:interceptors>
<bean id="wsSecurityInterceptor"
class="org.springframework.ws.soap.security.xwss.XwsSecurityInterceptor">
<property name="policyConfiguration" value="classpath:securityPolicy.xml" />
<property name="callbackHandlers">
<list>
<ref bean="passwordValidationHandler" />
</list>
</property>
</bean>
</sws:interceptors>
<bean id="passwordValidationHandler"
class="org.springframework.ws.soap.security.xwss.callback.SimplePasswordValidationCallbackHandler">
<property name="users">
<props>
<prop key="user">password</prop>
</props>
</property>
</bean>
还有securityPolicy.xml
<?xml version="1.0" encoding="UTF-8"?>
<xwss:SecurityConfiguration xmlns:xwss="http://java.sun.com/xml/ns/xwss/config">
<xwss:RequireUsernameToken passwordDigestRequired="true" nonceRequired="true" />
</xwss:SecurityConfiguration>
更新 2: 以下是来自 gatling 日志的完整请求和响应:
10:06:57.243 [WARN ] i.g.h.a.AsyncHandlerActor - Request 'post_Addresscheck' failed:
status.find.in(200,304,201,202,203,204,205,206,207,208,209), but
actually found 500
10:06:57.244 [TRACE] i.g.h.a.AsyncHandlerActor - http://localhost:8000/ROOT/checkAddresshttp://localhost:8000/ROOT/checkAddress
headers=
Accept-Encoding: gzip,deflate
Content-Type: text/xml;charset=UTF-8
Content-Length: 1830
Connection: keep-alive
Host: localhost:8000
Accept: */*
realm=Realmprincipal='user', password='password', scheme=DIGEST, realmName='', nonce='', algorithm='MD5', response='', qop='auth', nc='00000001', cno
nce='', uri='null', methodName='GET', useAbsoluteURI='true', omitQuery='false'
=========================
HTTP response:
status=
500 Internal Server Error
headers=
Server: [Apache-Coyote/1.1]
Accept: [text/xml, text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2]
SOAPAction: [""]
Content-Type: [text/xml;charset=utf-8]
Content-Length: [605]
Date: [Thu, 09 Jul 2015 08:06:57 GMT]
Connection: [close]
我是否遗漏了测试定义中的某些内容?
【问题讨论】:
您使用的是哪个版本的加特林?你能分享一个复制器应用程序(你的带有摘要身份验证的网络服务)吗? 我在问题中的回答。感谢您的帮助 摘要式身份验证不能是抢先式的,与基本的相反。客户端必须首先发送一个普通请求,以便服务器可以回复 401 和随机数。只有这样,客户端才能发送经过身份验证的请求。见en.wikipedia.org/wiki/Digest_access_authentication。所以第一个简单的请求是预期的。完整的请求和响应是什么?你确定不能提供简单的样本吗? 【参考方案1】:我认为这里可能存在混淆:Gatling 支持 HTTP 摘要身份验证,而不是 WSS 摘要身份验证(其中凭据作为 SOAP 标头在正文中传递,而不是 HTTP 标头)。
【讨论】:
以上是关于当摘要认证开启时,Gatling 测试失败的主要内容,如果未能解决你的问题,请参考以下文章