使用 TestServer 托管 ASOS

Hosting ASOS with TestServer

我有一个基于 AspNet.Security.OpenIdConnect.ServerOpenIdDict 身份验证服务器。设置按预期工作。

现在要进行一些流程集成;跨越整个后端架构的系统测试我使用 TestServer class。

Why I test like this is another question

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

{"IDX10803: Unable to obtain configuration from: 'http://localhost/.well-known/openid-configuration'."})

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

我能否让服务器发出配置或我能否以其他方式提供配置?

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

不幸的是,OpenID Connect 客户端中间件(在内部使用 HttpClient)无法知道这一点,并尝试向 OpenIddict 发送 "real" 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 自省中间件。