C# 负载测试标识服务器4出现异常:登录后尝试请求登录oidc路由时关联失败

C# 负载测试标识服务器4出现异常:登录后尝试请求登录oidc路由时关联失败,c#,identityserver4,load-testing,webtest,C#,Identityserver4,Load Testing,Webtest,我们正在将应用程序移动到IdentityServer4,我正在尝试使用Visual Studio编写负载测试,并可以通过浏览器在本地计算机上手动运行,但当我录制webtest并尝试回复它时,我遇到异常:关联失败未知位置Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler.HandlerRequestAsync 我假设这是因为我在请求登录oidc路由时丢失了.AspNetCore.Correlation.oidc cooki

我们正在将应用程序移动到IdentityServer4,我正在尝试使用Visual Studio编写负载测试,并可以通过浏览器在本地计算机上手动运行,但当我录制webtest并尝试回复它时,我遇到异常:关联失败未知位置Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler.HandlerRequestAsync

我假设这是因为我在请求登录oidc路由时丢失了.AspNetCore.Correlation.oidc cookie。Visual studio在登录时提取代码、id_标记、作用域、状态和会话状态。不知道如何调试它,因为它与我的浏览器一起工作,在通过VisualStudio运行webtest时它就不工作了。这可能是录制时的代理问题吗

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

我已经尝试从初始请求中提取nonce和state,以放入对oidc进行签名的请求中,但visual studio已经在从这些隐藏字段中提取相同的数据

这是失败的请求,它位于承载signin oidc的web服务器上

答复:

这是webtest请求

它使用来自授权/回调的上一个响应的值,我还确保它们是相同的值,唯一一个与作用域不完全相同的值,其中作用域使用+号而不是空格,因此我将编码设置为false以确保它们是相同的

由于浏览器在手动进入时正在执行前一个请求中的post,而webtest不是在浏览器中执行,它只是发出post请求,这可能会搞糟什么

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


这就是Web服务器抛出错误的原因,但我不确定cookie设置在哪里,以及您是否可以通过webtest进行设置。

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

我必须添加一个自定义提取规则,以便从标头中获取这些cookie,并将它们保存到singin oidc请求中使用的上下文中。 然后,在请求登录oidc时,我制作了一个webtest插件,并添加了PreRequest方法,以从第一个请求提取的上下文中添加cookie

执行此操作后,我没有得到标识相关的错误,并且从响应中设置了正确的cookie,当我使用刷新令牌调用以获取访问令牌时,我能够获取令牌以将其设置为承载令牌以调用其他API

我觉得如果标头正在设置cookie,我不需要从第一个响应中提取cookie,但是因为它是302重定向,所以也有相关请求正在设置cookie

我不知道这是否覆盖了前一个请求中的设置,即我需要的设置,如nonce和correlation。我还必须删除follow-dependent请求,并从第一个请求的302中提取位置头,然后手动发出下一个请求


如果其他人正在编写webtest以登录IdentityServer4并找到其他解决方案,请告诉我。

您从哪里获得异常?在VisualStudio中?在服务器中?作为HTTP响应中的文本?其他地方?我认为您需要提供更多有关正在发送的请求和失败请求的详细信息。Visual Studio会重播录制的请求,而记录器会查找(即关联一些动态数据)但不会找到所有这些请求。Web测试开发通常意味着查找和关联其他值。我更新了一些关于失败的请求/响应的更多信息。在web服务器上失败。webtest正在从identity server提取上一个请求的隐藏输入类型,即connect/Authority/callback。我怀疑webtest是否正在提取上一个请求的隐藏输入类型,而是怀疑它们是记录的值。根据我前面的评论,您需要在前面的响应中找到正确的值,将它们提取到上下文参数CPs中,并在失败的请求中使用这些CPs。也许您应该研究一下如何开发web测试以及如何处理动态数据。我已经在需要时提取了大量动态数据,但是visual studio正在处理这些数据,我对此进行了验证。根据我的经验,visual studio处理cookie时没有任何问题。然而,Identity Server可能会做VisualStudio不期望的事情。在找到解决方案方面做得很好 谢谢你在这里记录下来。