在ASP.NET中,使用JSON Web Token(JWT)進行身份驗證涉及以下幾個步驟:
安裝NuGet包:首先,您需要安裝兩個NuGet包,Microsoft.AspNetCore.Authentication.JwtBearer
和System.IdentityModel.Tokens.Jwt
。這些包將幫助您實現JWT身份驗證。
在Visual Studio中,右鍵單擊項目 -> 選擇“管理NuGet程序包” -> 搜索并安裝上述兩個包。
配置JwtBearer:在Startup.cs
文件中,您需要配置JwtBearer中間件。首先,將JwtBearer
添加到ConfigureServices
方法中的AuthenticationService
集合中:
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.RequireHttpsMetadata = true;
options.SaveToken = true;
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your_secret_key")),
ValidateIssuer = false,
ValidateAudience = false
};
});
請確保將your_secret_key
替換為您自己的密鑰。
創建登錄端點:在Controllers
文件夾中,創建一個名為AccountController
的新控制器。在此控制器中,添加一個名為Login
的POST方法,該方法將驗證用戶憑據并生成JWT令牌。
[HttpPost("login")]
public async Task<IActionResult> Login([FromBody] LoginViewModel model)
{
// 驗證用戶憑據(例如,檢查用戶名和密碼)
if (IsValidUser(model.Username, model.Password))
{
var claims = new[]
{
new Claim(ClaimTypes.Name, model.Username),
new Claim(ClaimTypes.Email, model.Email)
};
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your_secret_key"));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken(
issuer: "your_issuer",
audience: "your_audience",
claims: claims,
expires: DateTime.UtcNow.AddMinutes(30),
signingCredentials: creds);
return Ok(new { token });
}
return Unauthorized();
}
請確保將your_issuer
和your_audience
替換為您自己的值。
保護路由:現在,您可以使用[Authorize]
屬性保護需要身份驗證的路由。例如,如果您有一個名為ProtectedController
的控制器,可以將其中的所有方法標記為受保護:
[Authorize]
public class ProtectedController : Controller
{
// 受保護的方法
}
訪問令牌:當用戶通過登錄端點成功登錄時,他們將收到一個JWT令牌。在后續請求中,他們需要在HTTP請求頭中包含此令牌,如下所示:
Authorization: Bearer your_jwt_token
服務器將驗證此令牌并允許或拒絕訪問受保護的資源。
這就是在ASP.NET中使用JWT實現身份驗證的基本過程。您可能需要根據項目需求對其進行調整。