簡體   English   中英

IdentityServer 4,試圖用fiddler捕獲流量?

[英]IdentityServer 4, trying to capture traffic with fiddler?

控制台應用程序試圖獲取發現

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

工作正常,但我正在試圖弄清楚這個東西是如何工作的,我似乎無法捕獲http流量。

如果我使用http://localhost.fiddler重定向到本地代理錯誤:

連接到localhost.fiddler時出錯:5000 / .well-known / openid-configuration:需要HTTPS(沒有使用HTTPS設置,錯誤消息誤導!)

當我們嘗試使用web-api進行身份驗證時,在代碼中稍后會奇怪

var response = await client.GetAsync("http://localhost.fiddler:5001/identity");

localhost.fiddler工作正常,現在這是在同一個console.app中運行,在program.cs中運行相同的文件。 這讓我陷入困境,為什么我不能捕獲流量達到5000的HTTP! 那有什么神秘之處呢? 是否有另一種方法來查看進出Identity Server的神奇HTTP流量?

添加了啟動類

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        // configure identity server with in-memory stores, keys, clients and scopes
        services.AddIdentityServer()
            .AddDeveloperSigningCredential()
            .AddInMemoryApiResources(Config.GetApiResources())
            .AddInMemoryClients(Config.GetClients())
            .AddTestUsers(Config.GetUsers());
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseIdentityServer();
    }
}

添加了博客 ,如果我們可以解決此問題,將更新它並提供信用。

正如您所知,您需要使用http://localhost.fiddler來通過fiddler路由localhost流量。 但是,使用DiscoveryClient.GetAsync會將DiscoveryClient與默認策略配合使用。 對於此情況,該默認策略具有以下重要設置:

  • RequireHttps = true
  • AllowHttpOnLoopback = true

因此,除非您查詢環回地址,否則它需要https。 怎么知道什么是環回地址? DiscoveryPolicy.LoopbackAddresses屬性。 默認情況下,它包含:

  • “本地主機”
  • “127.0.0.1”

因此,您需要“HTTPS required”錯誤 - “localhost.fiddler”不被視為環回地址,默認策略要求https用於非環回地址。

因此,要修復,您需要將RequireHttps設置為false,或者將“localhost.fiddler”添加到環回地址列表:

var discoClient = new DiscoveryClient("http://localhost.fiddler:5000");
discoClient.Policy.LoopbackAddresses.Add("localhost.fiddler");
//discoClient.Policy.RequireHttps = false;                        
var disco = await discoClient.GetAsync();

如果你這樣做 - 你將在fiddler中看到disovery請求,但它會失敗(響應將包含錯誤),因為服務器將報告權限為“ http:// localhost:5000 ”並且您查詢“ http://localhost.fiddler :5000 “。 因此,您還需要覆蓋策略中的權限:

var discoClient = new DiscoveryClient("http://localhost.fiddler:5000");
discoClient.Policy.LoopbackAddresses.Add("localhost.fiddler");
discoClient.Policy.Authority = "http://localhost:5000";
var disco = await discoClient.GetAsync();

現在它將按預期工作。

暫無
暫無

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

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