试图捕获提琴手的流量?
作者:互联网
控制台应用程序尝试获取发现
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