
掌握ChatGPT插件與自定義GPT
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"Auth0": {
"Domain": "YOUR_DOMAIN",
"ClientId": "YOUR_CLIENT_ID"
}
}
將 YOUR_DOMAIN 和 YOUR_CLIENT_ID 替換為您從 Auth0 儀表板復制的相應值。
現在已經設置好 Auth0,您可以實施授權更改,以便您的應用程序可以利用它。
?首先,通過運行以下命令?安裝?Auth0 ASP.NET Core 身份驗證 SDK :
dotnet add package Auth0.AspNetCore.Authentication
該庫可讓您輕松、快速且毫不費力地將基于 OpenID Connect 的身份驗證集成到您的網站中。
現在讓我們修改我們的應用程序代碼以支持身份驗證機制。
轉到Program.cs文件并更新其內容:
// ADDED CODE
using Auth0.AspNetCore.Authentication;
var builder = WebApplication.CreateBuilder(args);
// ADDED CODE
builder.Services
.AddAuth0WebAppAuthentication(options => {
options.Domain = builder.Configuration["Auth0:Domain"];
options.ClientId = builder.Configuration["Auth0:ClientId"];
});
// Add services to the container.
builder.Services.AddControllersWithViews();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment()) {
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
// ADDED CODE
app.UseAuthentication();
app.UseAuthorization();
app.MapControllerRoute(name: "default", pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
這里我們首先添加了對 Auth0.AspNetCore.Authentication 的引用。然后我們使用Auth0 作為域和我們的客戶端 ID調用方法AddAuth0WebAppAuthentication() 。最后,我們調用UseAuthentication()方法以允許身份驗證中間件執行其工作。
為了實現登錄機制,在Controllers文件夾中添加一個AccountController.cs類,并添加以下代碼:
using Microsoft.AspNetCore.Authentication;
using Auth0.AspNetCore.Authentication;
using Microsoft.AspNetCore.Mvc;
public class AccountController : Controller {
public async Task Login(string URLtoReturn = "/") {
var properties = new LoginAuthenticationPropertiesBuilder()
.WithRedirectUri(URLtoReturn)
.Build();
await HttpContext.ChallengeAsync(Auth0Constants.AuthenticationScheme, properties);
}
}
此類定義一個控制器來處理標準用戶功能。
最后,確保添加一個重定向到該控制器的登錄鏈接,這樣您就有一個登錄表單。
重要的是要記住,即使身份驗證的基礎工作已經完成,您還沒有用它來保護任何方法。要做到這一點,您只需在其上添加[Authorize]指令,然后 ASP 將為您完成剩下的工作。
我們需要對我們的平臺做一些調整來解決上述特定的漏洞。
不安全的 ID:您可以通過將 GUID 實現為 ID 來輕松解決不安全的 ID。您必須盡早開發系統并考慮到此漏洞。屬于敏感資源的 ID 必須是唯一的且隱藏的。
路徑遍歷:解決路徑遍歷緩解問題需要您驗證用戶輸入并限制對關鍵資源的訪問。幸運的是,您不需要做太多事情來實施適當的路徑遍歷策略,因為 Spring Security 等庫非常強大。
文件權限:就文件權限而言,您無需做太多工作即可保證安全,除非您必須使用服務器權限并添加與文件操作相關的功能。盡管如此,如果需要,最好與您的服務器管理員溝通。
客戶端緩存:使用客戶端緩存,最好的解決方案也是最簡單的解決方案:只要您不在客戶端瀏覽器上存儲敏感的用戶信息,就沒問題。但如果您必須探索復雜的功能,請務必使用異步驗證和 HTML 元標記在頁面加載時確認權限。
在構建可靠的 Web 應用程序時,我們不斷做出可能影響業務穩定性和安全性的微小決策。我們依靠對開發、基礎設施和安全基礎知識的廣泛了解來正確履行這一職責。
此外,沒有什么比確保我們的平臺穩定和用戶信息安全更重要。這樣做是一個越來越復雜和敏感的過程。為了舉例說明,SD Times表示,訪問控制中斷是 OWASP 2021 年十大漏洞中最大的漏洞。?
開發人員應該關注這一點。但盡管它很復雜,但提供有效的訪問控制卻相當簡單,正如本文所述。
文章來源:.NET Broken Access Control Guide: Examples and Prevention