4

我有一个OpenIdDict基于AspNet.Security.OpenIdConnect.Server. 设置按预期工作。

现在做一些流程集成;跨越整个后端架构的系统测试,我使用这个TestServer类。

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

  • 以最少的工作量获得最多的测试代码覆盖率
  • 已决定不进行单元测试......(他们说工作太多)
  • 真正的集成测试,它跨越的代码少得多,当我想要获得良好的覆盖率时,这些测试也被视为很多工作
  • 该测试基于使用域语言方法构建的框架,这意味着我可以为我们当前的 web api 测试、selenium web ui 测试、selenium 负载测试和 wpf ui 测试描述相同的功能。

当我调用资源服务器的 Web api 端点时,授权想要加载http://localhost/.well-known/openid-configuration但失败。

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

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

  • AllowInsecureHttp = true,
  • RequireHttpsMetadata = false

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

4

1 回答 1

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 自省中间件。

于 2017-03-21T19:00:01.373 回答