Asp.net core 使用TestServer托管ASOS

Asp.net core 使用TestServer托管ASOS,asp.net-core,asp.net-identity,openid-connect,openiddict,aspnet-contrib,Asp.net Core,Asp.net Identity,Openid Connect,Openiddict,Aspnet Contrib,我有一个OpenIdDict身份验证服务器,它基于AspNet.Security.OpenIdConnect.server。安装程序按预期工作 现在做一些过程集成;跨越整个后端体系结构的系统测试我使用TestServer类 为什么我要这样测试是另一个问题 测试代码覆盖率最高,工作量最少 已经决定不进行单元测试。。。(他们说工作太多了) 真正的集成测试,它跨越的代码要少得多,当我想要实现良好的覆盖率时,它也需要做很多工作 该测试基于使用域语言方法构建的框架,这意味着我可以为我们当前的web ap

我有一个
OpenIdDict
身份验证服务器,它基于
AspNet.Security.OpenIdConnect.server
。安装程序按预期工作

现在做一些过程集成;跨越整个后端体系结构的系统测试我使用
TestServer

为什么我要这样测试是另一个问题

  • 测试代码覆盖率最高,工作量最少
  • 已经决定不进行单元测试。。。(他们说工作太多了)
  • 真正的集成测试,它跨越的代码要少得多,当我想要实现良好的覆盖率时,它也需要做很多工作
  • 该测试基于使用域语言方法构建的框架,这意味着我可以为我们当前的web api测试、selenium web ui测试、selenium负载测试和wpf ui测试描述相同的功能
当我调用ressource服务器的web api端点时,授权需要加载
http://localhost/.well-known/openid-configuration
但是失败了

{“IDX10803:无法从以下位置获取配置:“”)

以下是我用于测试环境的OpenIdConnectSettings:

  • AllowInsecureHttp=true
  • RequireHttpsMetadata=false

我可以让服务器发出配置吗?或者我可以以其他方式提供配置吗?

使用
TestServer
需要注意的是,内存中发生的一切:没有打开套接字来处理应用程序可能发送的HTTP请求

不幸的是,OpenID Connect客户端中间件(内部使用
HttpClient
)无法知道这一点,并尝试向OpenIddict发送“真实”HTTP请求以检索发现文档

要解决此问题,建议的方法是替换OIDC中间件使用的默认反向通道处理程序,以使用由
TestServer.CreateHandler()
提供的内存中处理程序:


注意:同样的方法也适用于JWT承载中间件和aspnet contrib自省中间件。

我可能很难像这样实现它,因为在我的体系结构中,身份验证服务器和ressource服务器是相同的。这就是为什么我在设置ressource服务器时没有身份验证服务器的TestHost实例。我不认为openiddict打算以这种方式使用,所以我必须为此付出代价。但是非常感谢你的回答@实际上,它与OpenIddict无关,因为它是一个客户端问题(与任何其他提供商的工作方式完全相同)。如果您真的不想拆分管道,请考虑使用真正的集成测试环境,并使用一个真正的服务器。ASP.NET团队的此项目(在NuGet.org上不可用)可能会在以下方面帮助您:。您可以在MusicStore示例中看到它的作用:。
app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
{
    Authority = "http://localhost:54540/",
    RequireHttpsMetadata = false,
    ClientId = "myClient",
    ClientSecret = "secret_secret_secret",
    BackchannelHttpHandler = server.CreateHandler()
});