ASP.NET Core 8.0 WebApi 從零開始學習JWT登錄認證

在開始學習 ASP.NET Core 8.0 WebAPI 的 JWT 登錄認證之前,您需要先了解一些基本的概念和準備工作。以下是一個從頭開始的指南,將引導您逐步設置環境並實現一個簡單的 JWT 登錄認證系統。

1. 安裝 Visual Studio 2023 Preview

首先,您需要在您的開發環境中安裝最新版本的 [Visual Studio 2023 Preview](https://visualstudio.microsoft.com/vs/preview/)。這將為您提供最新的功能和對 ASP.NET Core 8.0 的支援。

2. 創建新的 ASP.NET Core Web API 專案

使用 Visual Studio 2023 Preview 開啟一個新專案,選擇「檔案」>「新增」>「專案」,然後選取「Web 應用程式 (.NET Framework)」類型,命名您的專案,例如 “JwtAuthenticationSample”,並且確保勾選了 “ASP.NET Core Web API” 模板。接著按一下「建立」來創建您的專案。

3. 配置項目

在專案的初始化過程中,您會被要求選擇所需的框架版本。請選擇 “ASP.NET Core 8.0” 作爲目標框架。此時,Visual Studio 也會自動添加必要的 NuGet 包到您的項目中。

4. 安裝必需的套件

為了支持 JWT 登入認證,您需要安裝幾個額外的 NuGet 套件。透過右擊專案的 `Package Manager Console`,輸入下列命令以安裝這些套件:

Install-Package Microsoft.IdentityModel.Tokens
Install-Package System.IdentityModel.Tokens.Jwt
Install-Package Swashbuckle.AspNetCore

5. 定義用戶端識別碼與密鑰

在您的控制器或 Startup.cs 中定義客戶端的識別碼(client_id)與密鑰(secret key),用於生成 JWT 令牌。通常,這些資訊會存放在配置文件中,例如 appsettings.json。

{
// 其他配置省略
"JwtAuth": {
"ClientId": "your_client_id",
"SecretKey": "your_secret_key" // 建議使用強大的加密字串
}
}

6. 實作驗證管線

在您的 `Startup.ConfigureServices()` 方法中,加入 JWT 驗證服務。這裡我們使用了 JWT Bearer 擴充方法,它會自動處理大部分的 JWT 驗證流程。

public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();

var signingCredentials = new SigningCredentials(new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["JwtAuth:SecretKey"])), SecurityAlgorithms.HmacSha256);

services.AddAuthentication(x => { x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; })
.AddJwtBearer(x => {
x.RequireHttpsMetadata = false;
x.SaveToken = true;
x.IncludeErrorDetails = true;
x.Events = new JwtBearerEvents() {
OnAuthenticationFailed = context => {
if (context.Exception is SecurityTokenExpiredException) {
return Task.CompletedTask;
} else if (context.Exception is SecurityTokenInvalidSignatureException || context.Exception is SecurityTokenInvalidSignatureBufferFormatException) {
context.Response.StatusCode = StatusCodes.Status401Unauthorized;
return Task.FromResult(0);
}
else {
throw context.Exception;
}
}
};
});

services.AddAuthorization(options => { options.AddPolicy("Bearer", policy => policy.AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme)); });
}

7. 實作授權保護

在您的控制器的動作方法上加上適當的[授權]特性,以限制只有經過身份驗證的用戶才能訪問該資源。

[Route("api/v1/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
[Authorize] // 僅允許通過 JWT 驗證的用戶訪問這個動作方法
[HttpPost]
public IActionResult Post([FromBody] string value)
{
return Ok(value);
}
}

8. 整合 Swagger UI

如果您想要提供易用的 API 文檔界面給使用者,可以考慮使用 Swagger UI。在上一步中,已經透過 NuGet 管理介面安裝了 Swashbuckle.AspNetCore 套件。現在,只需要在 `Startup.Configure()` 方法中做些微調整即可:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseRouting();
app.UseEndpoints(endpoints => { endpoints.MapControllers(); });

app.UseSwagger();
app.UseSwaggerUI(setupAction => { setupAction.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1"); });
}

這樣一來,瀏覽器就可以透過網址 /swagger 來查看您的 API 文檔。

9. 測試與部署

完成上述步驟後,您可以透過瀏覽器或者 POSTMAN 等工具進行測試。一旦所有功能正常運行,您可以使用 Azure App Service 或其他雲平臺來部署您的 Web API。

總結來說,ASP.NET Core 8.0 WebAPI 的 JWT 登錄認證是一個相對複雜的主題,但透過本指南中的步驟,您可以快速地建立起基礎結構,並隨著需求逐漸完善您的解決方案。記得隨時檢查官方文件以及相關論壇上的最佳實踐,以保持您的知識更新。

为您推荐