问题描述
自从应用程序使用 Sitefinity - Azure AD B2C 身份验证以来,在登录应用程序时会传递多个请求,并且每个请求中都会传递一些值,例如随机数、状态属性、id 令牌等。工作流程非常复杂当查看通过登录请求传递的值/令牌时。尽管我已经创建/尝试了所有作为先前请求的响应而获得的值,但登录仍然没有发生。此外,我通过 Sitefinity 及其架构浏览了一些 B2C 身份验证文档,我了解到 Sitefinity 生成的令牌是一个内部过程,并且无法从之前的响应/客户端获取该令牌的响应。
我采取的解决方法:
-
将 selenium 集成到 Jmeter 并自动化登录场景并存储生成的 cookie。然后在以下内部请求中使用这些 cookie 和令牌 - 这种方法工作正常。
-
在 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 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 脚本实现