找不到 IdentityServer4 测试服务器

IdentityServer4 Testserver could not found

我正在编写测试以使用 Microsoft.AspNetCore.TestHost

identity server4 获取令牌
   var hostBuilder = new WebHostBuilder()
                    .ConfigureServices(services =>
                    {
                        services.AddIdentityServer()
                                .AddTemporarySigningCredential()
                                .AddInMemoryIdentityResources(Config.GetIdentityResources())
                                .AddInMemoryApiResources(Config.GetApiResources())
                                .AddInMemoryClients(Config.GetClients())
                                .AddTestUsers(Config.GetUsers())                           
                                ;

                    })
                    .Configure(app =>
                    {
                        app.UseIdentityServer();
                    });
                var server = new TestServer(hostBuilder);
                var client = server.CreateClient();
                client.BaseAddress = new Uri("http://localhost:5000");

                var disco = await DiscoveryClient.GetAsync("http://localhost:5000");

然后disco.Error出现如下错误

Error connecting to http://localhost:5001/.well-known/openid-configuration: An error occurred while sending the request.

我错过了什么?

发现客户端显然正在对该实际地址进行外部调用。您希望它调用恰好 "live" InMemory.

的测试服务器

查看这些测试 here 用于测试发现文档的 IdentityServer4。

要回答您的问题,您需要使用 DiscoveryClient 的重载方法之一,该方法接受一个处理程序,该处理程序可以为您的 InMemory 测试服务器生成正确的 "call"。下面是如何完成此操作的示例。

var server = new TestServer(hostBuilder);
var handler = server.CreateHandler();
var discoveryClient = new DiscoveryClient("http://localhost:5000", handler);
var discoveryDocument = await discoveryClient.GetAsync();

另外,如果您要自己进行一些这样的测试,我强烈建议您复习一下 IdentityServer4 集成测试。