其他分享
首页 > 其他分享> > 试图捕获提琴手的流量?

试图捕获提琴手的流量?

作者:互联网

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

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

工作正常,但是我试图弄清楚这东西是如何工作的,我似乎无法捕获HTTP流量.

如果我使用http://localhost.fiddler重定向到本地代理,则会出现以下错误:

连接到localhost.fiddler:5000 / .wellknown / openid-configuration时出错:需要HTTPS(未使用HTTPS进行设置,错误msg具有误导性!)

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

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();
    }
}

添加了Blog,如果我们可以解决,将对其进行更新并归功于它.

解决方法:

如您正确确定的那样,您需要使用例如http://localhost.fiddler来通过Fiddler路由本地主机流量.但是,使用DiscoveryClient.GetAsync将DiscoveryClient与默认策略一起使用.该默认策略具有以下对于这种情况很重要的设置:

> RequireHttps = true
> AllowHttpOnLoopback = true

因此,除非您查询回送地址,否则它需要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();

如果这样做-您将在提琴手中看到转移请求,但是它将失败(响应将包含错误),因为服务器将报告权限为“ 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();

现在它将按预期工作.

标签:identityserver4,asp-net-web-api,fiddler,oidc,c
来源: https://codeday.me/bug/20191025/1927799.html