[英]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
與默認策略配合使用。 對於此情況,該默認策略具有以下重要設置:
因此,除非您查詢環回地址,否則它需要https。 怎么知道什么是環回地址? 有DiscoveryPolicy.LoopbackAddresses
屬性。 默認情況下,它包含:
因此,您需要“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.