找不到 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 集成测试。
我正在编写测试以使用 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 集成测试。