
掌握ChatGPT插件與自定義GPT
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"Auth0": {
"Domain": "YOUR_DOMAIN",
"ClientId": "YOUR_CLIENT_ID"
}
}
將 YOUR_DOMAIN 和 YOUR_CLIENT_ID 替換為您從 Auth0 儀表板復(fù)制的相應(yīng)值。
現(xiàn)在已經(jīng)設(shè)置好 Auth0,您可以實(shí)施授權(quán)更改,以便您的應(yīng)用程序可以利用它。
?首先,通過運(yùn)行以下命令?安裝?Auth0 ASP.NET Core 身份驗(yàn)證 SDK :
dotnet add package Auth0.AspNetCore.Authentication
該庫可讓您輕松、快速且毫不費(fèi)力地將基于 OpenID Connect 的身份驗(yàn)證集成到您的網(wǎng)站中。
現(xiàn)在讓我們修改我們的應(yīng)用程序代碼以支持身份驗(yàn)證機(jī)制。
轉(zhuǎn)到Program.cs文件并更新其內(nèi)容:
// 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();
這里我們首先添加了對(duì) Auth0.AspNetCore.Authentication 的引用。然后我們使用Auth0 作為域和我們的客戶端 ID調(diào)用方法AddAuth0WebAppAuthentication() 。最后,我們調(diào)用UseAuthentication()方法以允許身份驗(yàn)證中間件執(zhí)行其工作。
為了實(shí)現(xiàn)登錄機(jī)制,在Controllers文件夾中添加一個(gè)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);
}
}
此類定義一個(gè)控制器來處理標(biāo)準(zhǔn)用戶功能。
最后,確保添加一個(gè)重定向到該控制器的登錄鏈接,這樣您就有一個(gè)登錄表單。
重要的是要記住,即使身份驗(yàn)證的基礎(chǔ)工作已經(jīng)完成,您還沒有用它來保護(hù)任何方法。要做到這一點(diǎn),您只需在其上添加[Authorize]指令,然后 ASP 將為您完成剩下的工作。
我們需要對(duì)我們的平臺(tái)做一些調(diào)整來解決上述特定的漏洞。
不安全的 ID:您可以通過將 GUID 實(shí)現(xiàn)為 ID 來輕松解決不安全的 ID。您必須盡早開發(fā)系統(tǒng)并考慮到此漏洞。屬于敏感資源的 ID 必須是唯一的且隱藏的。
路徑遍歷:解決路徑遍歷緩解問題需要您驗(yàn)證用戶輸入并限制對(duì)關(guān)鍵資源的訪問。幸運(yùn)的是,您不需要做太多事情來實(shí)施適當(dāng)?shù)穆窂奖闅v策略,因?yàn)?Spring Security 等庫非常強(qiáng)大。
文件權(quán)限:就文件權(quán)限而言,您無需做太多工作即可保證安全,除非您必須使用服務(wù)器權(quán)限并添加與文件操作相關(guān)的功能。盡管如此,如果需要,最好與您的服務(wù)器管理員溝通。
客戶端緩存:使用客戶端緩存,最好的解決方案也是最簡單的解決方案:只要您不在客戶端瀏覽器上存儲(chǔ)敏感的用戶信息,就沒問題。但如果您必須探索復(fù)雜的功能,請(qǐng)務(wù)必使用異步驗(yàn)證和 HTML 元標(biāo)記在頁面加載時(shí)確認(rèn)權(quán)限。
在構(gòu)建可靠的 Web 應(yīng)用程序時(shí),我們不斷做出可能影響業(yè)務(wù)穩(wěn)定性和安全性的微小決策。我們依靠對(duì)開發(fā)、基礎(chǔ)設(shè)施和安全基礎(chǔ)知識(shí)的廣泛了解來正確履行這一職責(zé)。
此外,沒有什么比確保我們的平臺(tái)穩(wěn)定和用戶信息安全更重要。這樣做是一個(gè)越來越復(fù)雜和敏感的過程。為了舉例說明,SD Times表示,訪問控制中斷是 OWASP 2021 年十大漏洞中最大的漏洞。?
開發(fā)人員應(yīng)該關(guān)注這一點(diǎn)。但盡管它很復(fù)雜,但提供有效的訪問控制卻相當(dāng)簡單,正如本文所述。
文章來源:.NET Broken Access Control Guide: Examples and Prevention
對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力
一鍵對(duì)比試用API 限時(shí)免費(fèi)