我一直在使用模板 Identity Server 實作托管的 Blazor Webassembly ASP.NET Core 中開發一個愛好專案,并開發了一些授權,它查看來自 Blazor Webassembly 的 API 呼叫,并使用請求標頭“Referer”進行授權.
用戶對他們參加的一些團隊有一些訂閱,他們可以在它們之間切換。
URL 包含他們當前所在團隊頁面的 Guid,當 Blazor Webassembly 對 ASP.NET Core Web API 進行 API 呼叫時,它會查看“Referer”以找到 Guid。
這是使用 ASP.NET Core 托管的請求標頭“Referer”值
'Referer' 值將是
https://localhost:5001/Instructor/{some-guid}.
因此,從“Referer”中的 Guid 中,我可以知道用戶正在嘗試獲取哪個團隊的資訊。前任 團隊成員名單。
這運行良好,但是因為我正在遷移到 ASP.NET Core 6,并且想要創建 JAMStack 設定,所以我轉移到了具有獨立 Blazor Webassembly 和 ASP.NET Core Web API 設定的新設定。
我有完全相同的授權設定,除了我已經切換到使用 Auth0 而不是 Identityserver (Duende)。
我還使用 NSwagStudio 為舊專案和新專案的 HTTP 請求創建客戶端(并且設定相同)。
我現在的問題是,當我查看請求標頭“Referer”時。我只得到根地址 https://localhost:7004/。它不發送 URL 的其余部分。
這是遷移專案中的請求“Referer”,不是由 ASP.NET Core 托管的
從我的研究中可以看出,'Referer' 的使用可能并不像這么多,因為根本沒有關于這個標題的資訊。
有誰知道這是否可能是我切換到 Auth0,或者我應該注意的 .NET 5 和 .NET 6 之間是否有任何變化。
或者也許只是關于我如何控制它的資訊。
我像這樣添加 NSwagClients(使用最新的 NSwag 版本):
string webApiBaseAddress = builder.Configuration["webApiBaseAddress"] ?? string.Empty;
builder.Services.AddTransient<AuthorizationMessageHandler>(sp =>
{
// Get required services from DI.
var provider = sp.GetRequiredService<IAccessTokenProvider>();
var naviManager = sp.GetRequiredService<NavigationManager>();
// Create a new "AuthorizationMessageHandler" instance,
// and return it after configuring it.
var handler = new AuthorizationMessageHandler(provider, naviManager);
handler.ConfigureHandler(authorizedUrls: new[] {
// List up URLs which to be attached access token.
naviManager.ToAbsoluteUri($"{webApiBaseAddress}/api/authorized/").AbsoluteUri
});
return handler;
});
builder.Services.AddHttpClient<ITeamClient, TeamClient>(client =>
client.BaseAddress = new Uri(webApiBaseAddress)).AddHttpMessageHandler<AuthorizationMessageHandler>();
uj5u.com熱心網友回復:
我在這上面花了很多天后才弄明白。
問題是 ASP.NET Core Hosted Blazor Webassembly 呼叫具有相同 Origin 的 API,因此 'Referrer Policy': 'origin-when-cross-origin' 沒有限制 'Referer' 標頭。
“origin-when-cross-origin”是“Referrer Policy”的標準,限制了跨域呼叫的“Referer”標頭。
但是當我在自己的專案中分別使用 Blazor Webassembly 和 ASP.NET Core Web API 運行它時,它們是 localhost:7004 和 localhost:7170,它們被視為同站點而不是同源,因此僅限于將“Origin”顯示為“Referer”標題。
我似乎找不到任何方法讓 API 和 Blazor 來自同一個“來源”,所以我現在通過<meta name="referrer" content="no-referrer-when-downgrade">在 Blazor Webassembly 中設定我的 index.html 檔案使我的應用程式不太安全。
我的應用程式不會在 URL 中發送用戶敏感資訊,并且所有內容都使用 HTTPS,因此如果外部源讀取“Referer”,這并不是什么大問題。
我將尋找一個更好的解決方案來告訴我的 API 來自哪個團隊的呼叫者正在嘗試訪問內容,以檢查呼叫者是否在 JWT 中也有訪問它的策略,但現在就可以了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/409265.html
標籤:
