"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)值。 

實(shí)現(xiàn)身份驗(yàn)證 SDK

現(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í)行其工作。

.NET 破壞訪問控制指南:示例和預(yù)防圖像

實(shí)現(xiàn)登錄

為了實(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

上一篇:

開源手冊(cè):為開發(fā)者提供的初學(xué)者手冊(cè)

下一篇:

Rails破壞身份驗(yàn)證指南:示例與預(yù)防
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊(cè)

多API并行試用

數(shù)據(jù)驅(qū)動(dòng)選型,提升決策效率

查看全部API→
??

熱門場景實(shí)測,選對(duì)API

#AI文本生成大模型API

對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)

#AI深度推理大模型API

對(duì)比大模型API的邏輯推理準(zhǔn)確性、分析深度、可視化建議合理性

10個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)