當前位置: 妍妍網 > 碼農

WebApi中添加Jwt鑒權

2024-06-01碼農

隨著Web套用的快速發展,安全性成為了越來越重要的考量因素。JSON Web Token(JWT)作為一種開放標準(RFC 7519),定義了一種緊湊的、自包含的方式,用於在雙方之間安全地傳輸資訊作為JSON物件。這些資訊可以被驗證、信任,因為它們是數位簽名的。在WebApi中添加JWT鑒權,可以大大提高系統的安全性。

JWT簡介

JWT主要由三部份組成:Header(頭部),Payload(負載),和Signature(簽名)。Header和Payload都是JSON物件,經過Base64編碼後形成JWT的第一部份和第二部份。Signature是對前兩部份進行簽名,防止數據被篡改。

在WebApi中添加JWT鑒權

以下是在ASP.NET Core WebApi中添加JWT鑒權的基本步驟:

1. 安裝必要的NuGet包

首先,你需要在計畫中安裝 Microsoft.AspNetCore.Authentication.JwtBearer 包。

dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer

2. 配置JWT認證

Startup.cs ConfigureServices 方法中配置JWT認證。

publicvoidConfigureServices(IServiceCollection services)
{
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = "YourIssuer"// 你的Issuer
ValidAudience = "YourAudience"// 你的Audience
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("YourSecretKey")) // 你的金鑰
};
});
services.AddControllers();
}

3. 套用JWT中介軟體

Startup.cs Configure 方法中,確保 app.UseAuthentication() app.UseAuthorization() 被正確呼叫。

publicvoidConfigure(IApplicationBuilder app, IWebHostEnvironment env)
{
// ... 其他中介軟體配置 ...
app.UseAuthentication(); // 啟用認證中介軟體
app.UseAuthorization(); // 啟用授權中介軟體
// ... 其他中介軟體配置 ...
}

4. 在控制器或動作上套用授權內容

現在,你可以在你的控制器或動作方法上使用 [Authorize] 內容來要求JWT認證。

[ApiController]
[Route("[controller]")]
[Authorize// 這個控制器下的所有動作都需要JWT認證
public classValuesController : ControllerBase
{
// GET api/values
[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{
returnnewstring[] { "value1""value2" };
}
}

或者,你也可以只對特定的動作方法套用 [Authorize] 內容。

[ApiController]
[Route("[controller]")]
public classValuesController : ControllerBase
{
// GET api/values
[HttpGet]
[Authorize// 僅這個動作需要JWT認證
public ActionResult<IEnumerable<string>> Get()
{
returnnewstring[] { "value1""value2" };
}
}

5. 測試你的JWT認證

為了測試你的JWT認證是否工作正常,你可以使用Postman或Curl等工具發送帶有有效或無效JWT的請求到你的API端點,並觀察響應。如果認證成功,你應該能夠存取受保護的資源;如果認證失敗,你應該會收到一個401 Unauthorized響應。

結論

在WebApi中添加JWT鑒權是保護你的API免受未經授權存取的重要步驟。透過遵循上述步驟,你可以輕松地為你的ASP.NET Core WebApi添加JWT鑒權功能。記住,安全性是一個持續的過程,定期審查和更新你的安全策略是非常重要的。