隨著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鑒權功能。記住,安全性是一個持續的過程,定期審查和更新你的安全策略是非常重要的。