代码之家  ›  专栏  ›  技术社区  ›  fuzzybear

IdentityServer 4,正在尝试使用fiddler捕获流量?

  •  3
  • fuzzybear  · 技术社区  · 6 年前

    控制台应用程序正在尝试获取发现

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

    工作正常,但我正在试图弄清楚这件事是如何工作的,我似乎无法捕获http流量。

    如果我使用 http://localhost.fiddler 要重定向到本地代理错误,请执行以下操作:

    连接到本地主机时出错。提琴手:5000/。众所周知的/openid配置:需要HTTPS(它不是用HTTPS设置的,错误消息具有误导性!)

    奇怪的是,在代码的后面,当我们尝试使用

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

    本地主机。fiddler工作正常,现在它正在同一个控制台中运行。应用程序,在程序中。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();
        }
    }
    

    补充 Blog ,如果我们能够解决此问题,将更新它并记入贷方。

    1 回复  |  直到 6 年前
        1
  •  4
  •   Evk    6 年前

    正如您正确理解的,您需要使用,例如, http://localhost.fiddler ,以通过fiddler路由本地主机流量。但是,使用 DiscoveryClient.GetAsync 使用 DiscoveryClient 使用默认策略。对于这种情况,该默认策略具有以下重要设置:

    • RequireHttps=真
    • allowhtponloopback=真

    所以,除非您查询环回地址,否则它需要https。它如何知道什么是环回地址?有 DiscoveryPolicy.LoopbackAddresses 所有物默认情况下,它包含:

    • “本地主机”
    • "127.0.0.1"

    因此,您出现了“需要HTTPS”错误-“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();
    

    现在它将按预期工作。