如何使用 Sitefinity 加载测试登录 - Azure AD B2C Authentication oauth2 with JMeter

问题描述

自从应用程序使用 Sitefinity - Azure AD B2C 身份验证以来,在登录应用程序时会传递多个请求,并且每个请求中都会传递一些值,例如随机数、状态属性、id 令牌等。工作流程非常复杂当查看通过登录请求传递的值/令牌时。尽管我已经创建/尝试了所有作为先前请求的响应而获得的值,但登录仍然没有发生。此外,我通过 Sitefinity 及其架构浏览了一些 B2C 身份验证文档,我了解到 Sitefinity 生成的令牌是一个内部过程,并且无法从之前的响应/客户端获取该令牌的响应。

我采取的解决方法

  1. 将 selenium 集成到 Jmeter 并自动登录场景并存储生成的 cookie。然后在以下内部请求中使用这些 cookie 和令牌 - 这种方法工作正常。

    Selenium- Jmeter for login

  2. 在 Cookie 管理器中硬编码一个实时 cookie 并发送内部请求 - 这也很好用。

我想知道是否还有其他可能的登录方式,因为从长远来看,上述两种方法都不可靠。任何人都知道在本地生成令牌 ID 并将其传递给 JMeter。例如,创建一个生成 Sitefinity 令牌的 .exe 文件。这样我们就可以在 Jmeter 的 OS Process Sampler 中传递或执行 .exe 文件,并从其响应中获取令牌。

还有其他方法吗?

解决方法

我假设您使用的是 Sitefinity 内置的 OpenIdConnect 身份验证提供程序?

所以,基本上当用户点击登录按钮时,他被重定向到:

/login/LoginExternalProvider/OpenIdConnect/

此处 Sitefinity 回复重定向至:

/Sitefinity/Authenticate/OpenID/connect/authorize?client_id=sitefinity&....

然后重定向到

/Sitefinity/Authenticate/OpenID/login?signin=....

这最终重定向到外部身份验证提供程序。

(是的,这是一个复杂的工作流程)。

因此,如果您尝试仅对第一个请求 (/login/LoginExternalProvider/OpenIdConnect/) 进行负载测试 - 它会不会自动跟随重定向响应(抱歉,不熟悉 jmeter)?

这些响应包含 Sitefinity 创建的正确 cookie,等等。

,

根据Sitefinity documentation

Sitefinity CMS 使用声明身份验证,在 IdentityServer3 之上实施,由 OpenID Foundation 认证。它允许为现代 Web 应用程序和 API 实现单点登录和访问控制。它使用 OAuth2 和 OpenID Connect 协议。

标准化身份验证,基于 OpenID Connect 和 JWT,认证 IdentityServer3。

鉴于您能够使用浏览器登录 - 您可以使用 JMeter 的 HTTP Request 采样器复制相同的请求,这只是 correlation 的问题 - 从响应并在下一个请求中使用它们。

您可以参考 OpenID Connect - How to Load Test with JMeter 文章,例如 JMeter 脚本实现

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...