JMeter与SSO和Cookie的问题

时间:2017-02-22 19:41:45

标签: jmeter

使用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%肯定。

2 个答案:

答案 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管理器会这样做。

所以你最好给你的开发者一个单挑 - 这是一个错误。