我正在编写一个测试,以使用Microsoft.AspNetCore.TestHost从身份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出现以下错误
连接到 http:// localhost:5001/.well-known/openid-configuration时出错:发送请求时出错.
我错过了什么?
发现客户端显然正在对该实际地址进行外部调用.您希望它调用碰巧"活"InMemory的测试服务器.
在这里查看测试发现文档的IdentityServer4的这些测试.
要回答你的问题,你需要使用其中一个重载方法来DiscoveryClient
处理能够对你的InMemory测试服务器进行正确"调用"的处理程序.以下是如何完成此操作的示例.
var server = new TestServer(hostBuilder); var handler = server.CreateHandler(); var discoveryClient = new DiscoveryClient("http://localhost:5000", handler); var discoveryDocument = await discoveryClient.GetAsync();
另外,我强烈建议您进行IdentityServer4集成测试,如果您要进行一些自己的测试.