使用JMeter 3.1 r1770033,我遇到两个问题,即通过我们的单点登录存储公司特定的cookie。 (SSO)
我在本网站上阅读了很多有关cookie的博文和问题,但似乎没有一篇解决我的具体问题“ HC3CookieHandler:不存储无效的cookie:”
我认为这是由于公司希望cookie格式化的实现。
Cookie:companyAuthorizedEnvironment = assignedTokenId
我可以使用 curl 成功使用命令行界面,但不能通过JMeter成功。
curl --request POST --header "X-OpenAM-Username:username" --header "X-OpenAM-Password:password” --header "Content-Type:application/json" --data "{}" https://sso.company.com/access/authenticate/
Response
{"tokenId": "AQIC5w_TEXT_REMOVED_NTcy*", "successUrl": "/openam/console" }
以下是我的简单登录/退出测试的概述,其中包含解释和 2结果问题的摘要。
非常感谢任何帮助!
测试计划
HTTP缓存管理器
Clear cache each iteration? = enabled
Use Cache-Control = disabled
Max # of elements = 5000
HTTP Cookie管理器
我已尝试过所有可能的实施/政策组合,但没有成功。
Clear cookies each iteration = enabled
Implementation = HC3CookieHandler
Cookie Policy = default
SETUP THREAD GROUP = SSO AUTHENTICATION
“此过程允许远程客户端使用有效凭据对SSO进行身份验证。成功进行身份验证后,将向用户显示身份验证令牌,然后用于访问受保护的应用程序。”
HTTP Header Mgr
X-OpenAM-Username: ${username}
X-OpenAM-Password: ${password}
Content-Type: application/json
HTTP Request
Server Name = sso.stage.company.com
Protocol = ${__P(protocol,https)}
Method = POST
Path = /access/authenticate/
REGEX
Ref Name = newTokenId
Reg Expression = "tokenId":(.+?)\,
Template = $1$
Match No. = 1
Default = null
BEANSHELL ASSERTION
${__setProperty(tokenId,${newTokenId})}
TEARDOWN THREAD GROUP = SSO LOGOUT
“此过程允许远程客户端通过注销系统终止与SSO的活动会话”
HTTP Header Mgr
Cookie: companyauthstage=${tokenId}
Content-Type: application/json
HTTP Request
Server Name = sso.stage.company.com
Protocol = ${__P(protocol,https)}
Method = POST
Path = /access/logout/
问题1 - 登录
我在跟踪日志中看到以下警告。
WARN - jmeter.protocol.http.control.HC3CookieHandler: Not storing invalid cookie: <amlbcookie=01; Domain=sso.stage.company.com.; Path=/> for URL https://sso.stage.company.com/access/authenticate/ (Illegal domain attribute "sso.stage.company.com.". Domain of origin: "sso.stage.company.com")
不确定为什么这是非法的。我想知道是否某个句点(。)被附加到域。我已经证实我在任何地方都没有额外的时间。
问题2 - 退出
Response code: 401
Response message: Unauthorized
我怀疑它是未经授权的,因为没有存储“Cookie:companyauthstage = $ {tokenId}”标题,但我不是100%肯定。
答案 0 :(得分:1)
如果您完全确定cookie是正常的,您可以通过向 user.properties 文件添加下一行来强制JMeter禁用cookie检查并按原样存储它们(通常位于&#下) 34; bin&#34; JMeter安装文件夹)
CookieManager.check.cookies=false
JMeter重启将需要选择该属性。
您可以通过-J命令行参数传递属性来实现相同的目的,如:
jmeter -JCookieManager.check.cookies=false -n -t ....
参考文献:
答案 1 :(得分:0)
您已经获得了所需的描述:
Illegal domain attribute "sso.stage.company.com.". Domain of origin: "sso.stage.company.com"
这是非法的&#34;因为它最后有一个点,因此它与它来自的域不匹配。这就是安全范围,因此所有客户端软件都应该非常认真地对待它,因此cookie管理器会这样做。
所以你最好给你的开发者一个单挑 - 这是一个错误。