使用TestServer托管ASOS

时间:2017-03-21 15:36:15

标签: asp.net-core asp.net-identity openid-connect openiddict aspnet-contrib

我有一个基于OpenIdDict的{​​{1}}身份验证服务器。设置按预期工作。

现在要做一些进程集成;跨越整个后端架构的系统测试我使用AspNet.Security.OpenIdConnect.Server类。

  

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

  • 大多数测试代码覆盖率最低的工作量
  • 已决定不进行单元测试......(他们说太多工作)
  • 真正的集成测试,其中包含更少的代码,当我想要实现良好的覆盖时,也可以看到很多工作
  • 测试基于使用域语言方法构建的框架,这意味着我可以为我们当前的web api测试,selenium web ui测试,硒负载测试和wpf ui测试描述相同的功能。 / LI>

当我调用我的资源服务器的web api端点时,授权要加载TestServer但是失败。

  

{" IDX10803:无法从以下位置获取配置:' http://localhost/.well-known/openid-configuration'。"})

这是我用于测试环境的OpenIdConnectSettings:

  • AllowInsecureHttp = true,
  • RequireHttpsMetadata = false

我可以让服务器发出配置,还是可以通过其他方式提供配置?

1 个答案:

答案 0 :(得分:4)

TestServer需要注意的重要一点是,所有内容都发生在内存中:没有打开套接字来处理应用程序可能发送的HTTP请求。

不幸的是,OpenID Connect客户端中间件(内部使用HttpClient)无法知道并试图发送"真正的"对OpenIddict的HTTP请求以检索发现文档。

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

app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
{
    Authority = "http://localhost:54540/",
    RequireHttpsMetadata = false,
    ClientId = "myClient",
    ClientSecret = "secret_secret_secret",
    BackchannelHttpHandler = server.CreateHandler()
});

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