负载测试 IdentityServer4 给出异常:登录后尝试请求 signin-oidc 路由时关联失败

Load testing IdentityServer4 gives Exception: Correlation failed when trying to request signin-oidc route after sing in

我们正在将我们的应用程序移动到 IdentityServer4 以用于我们的应用程序,我正在尝试使用 Visual Studio 编写负载测试并且可以 运行 通过浏览器在我的本地计算机上手动编写它,但是当我记录了一个网络测试并尝试回复它,我收到异常:关联失败未知位置 Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler.HandleRequestAsync().

我假设这是因为我在向 signin-oidc 路由发出请求时缺少 .AspNetCore.Correlation.oidc cookie。 Visual studio提取登录时的代码,id_token、范围、状态和会话状态。不确定如何调试它,因为它适用于我的浏览器,当 运行 通过 visual studio 进行网络测试时它不会工作。这可能是录制时的代理问题吗?

任何建议都会有所帮助,没有找到太多关于使用 Visual Studio 负载测试登录 Identity Server 4 进行负载测试的信息。

我已经尝试从初始请求中提取随机数和状态以放入对 sign-oidc 的请求中,但是 visual studio 已经从隐藏字段中提取了相同的数据。

这是失败的请求,它在托管 signin-oidc 的网络服务器上

回应:

这是网络测试请求

它使用来自 authorize/callback 的先前响应的值,我还确保它们是相同的值,唯一不完全相同的值是带有 + 号的范围空格,所以我将编码设置为 false 以确保它们相同。

由于浏览器在手动进入时正在执行上一个请求的 post,而 webtest 不是从浏览器执行的,它只是发出一个 post 请求,这可能搞砸了什么?

当我手动通过 fiddler 时,该请求具有以下 webtest 没有的 cookie:

这可能就是网络服务器抛出错误的原因,但我不确定该 cookie 的设置位置以及您是否可以通过网络测试来完成。

我能够从第一个请求的响应中获取 .AspNetCore.Correlation.oidc 和 .AspNetCore.OpenIdConnect.Nonce cookie

我必须添加自定义提取规则以从 header 获取这些 cookie 并将它们保存在上下文中(以在 singin-oidc 请求中使用)。
然后根据对 signin-oidc 的请求,我制作了一个 webtest 插件并添加了 PreRequest 方法以从从第一个请求中提取的上下文中添加 cookie。

这样做之后,我没有收到身份关联错误,并且从响应中设置了正确的 cookie,当我调用使用刷新令牌获取访问令牌时,我能够获得令牌将其设置为不记名令牌以调用其他 API。

如果 header 正在设置它们,我觉得我不需要从第一个响应中提取 cookie,但是由于它是 302 重定向,所以有依赖请求也在设置 cookie。

我不知道这是否覆盖了之前请求中设置的那些(我需要的那些,比如随机数和相关性)。我还必须取消跟随相关请求并从第一个请求的 302 中提取位置 Header 并手动发出下一个请求。

如果其他人正在编写用于登录 IdentityServer4 的网络测试并找到不同的解决方案,请告诉我。