簡體   English   中英

找不到 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 出現以下錯誤

連接到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 集成測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM