ช่วงนี้ผมมีโอกาสได้ไปฝึกเจ้า ASP.NET Core 8 เพื่อเอาไปใช้งานกับโปรเจกต์ใหม่ที่บริษัท ในหลายๆหัวข้อที่ฝึก แต่วันนี้จะมาแชร์ในหัวข้อ
การใช้ JWT (JSON Web Token) Token Authentication เป็นวิธีที่ได้รับความนิยมในการจัดการความปลอดภัยและการยืนยันตัวตนในแอปพลิเคชันเว็บ ด้วยการใช้ JWT เราสามารถสร้างระบบที่ปลอดภัยสำหรับการเข้าถึง API และ Service ต่างๆ ในแอปพลิเคชันของเรา ในบทความนี้จะพามาทำระบบ JWT Authentication ใน ASP.NET Core โดยใช้ MySQL เป็นฐานข้อมูลครับ
ขั้นตอนการติดตั้ง
ต้องมีการสร้างโปรเจกต์ไว้แล้วนะครับ และให้ทำการติดตั้งแพ็กเกจที่จำเป็นโดยใช้คำสั่งต่อไปนี้ใน Command Line
# ตั้งค่า ASPNETCORE_ENVIRONMENT=Development
dotnet add package Microsoft.EntityFrameworkCore
dotnet add package BCrypt.Net
dotnet add package Pomelo.EntityFrameworkCore.MySql
dotnet add package System.IdentityModel.Tokens.Jwt
dotnet add package Microsoft.IdentityModel.Tokens
dotnet add package Microsoft.EntityFrameworkCore.Design
การตั้งค่าการเชื่อมต่อ MySQL ในไฟล์ appsettings.json
ให้เพิ่มการตั้งค่าการเชื่อมต่อฐานข้อมูล MySQL ลงในไฟล์ appsettings.json ของคุณ
{
...
"AllowedHosts": "*",
"ConnectionStrings": {
"DefaultConnection": "Server=localhost;Port=3306;Database=mydatabase;Uid=root;Pwd=root;"
},
"AppSettings": {
"Secret": "YourSuperSecretKeyHereWithAtLeast16Chars",
"RefreshTokenTTL": 2
}
}
การสร้าง Migration
หลังจากติดตั้งแพ็กเกจแล้ว ให้สร้างการ Migration เพื่อสร้างโครงสร้างของฐานข้อมูล
# dotnet ef migrations remove
dotnet ef migrations add InitialCreate
dotnet ef database update
การตั้งค่า WebApplication
-
การสร้าง WebApplication เริ่มต้นสร้าง WebApplication ด้วย WebApplication.CreateBuilder(args).
-
การตั้งค่า Service Container เพิ่ม
DbContext
และลงทะเบียนบริการที่จำเป็นservices.AddDbContext<DataContext>(); services.AddCors(); services.AddControllers().AddJsonOptions(x => { x.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()); x.JsonSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull; x.JsonSerializerOptions.WriteIndented = true; x.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.Preserve; }); services.Configure<AppSettings>(builder.Configuration.GetSection("AppSettings")); services.AddScoped<IJwtUtils, JwtUtils>(); services.AddScoped<IUserService, UserService>();
-
การตั้งค่า Swagger
เพื่อให้สามารถทดสอบ API ได้ง่ายขึ้น เพิ่ม Swagger
builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen();
-
การสร้าง WebApplication
สร้างแอปพลิเคชันจากการตั้งค่าที่ได้ทำไว้แล้ว
var app = builder.Build();
-
การ Seed ข้อมูลใน Database กำหนดให้เพิ่มผู้ใช้ทดสอบเมื่อเริ่มต้นแอปพลิเคชัน:
using (var scope = app.Services.CreateScope()) { var context = scope.ServiceProvider.GetRequiredService<DataContext>(); context.Database.EnsureDeleted(); context.Database.Migrate(); var testUser = new User { FirstName = "Test", LastName = "Test", Username = "test", PasswordHash = BCrypt.Net.BCrypt.HashPassword("test") }; context.Users.Add(testUser); context.SaveChanges(); }
-
การตั้งค่า Middleware กำหนดให้ใช้ CORS และ JWT Authentication
app.UseCors(x => x.AllowAnyMethod().AllowAnyHeader().AllowCredentials()); app.UseMiddleware<ErrorHandlerMiddleware>(); app.UseMiddleware<JwtMiddleware>(); app.MapControllers();
-
การตั้งค่าสำหรับสภาพแวดล้อมการพัฒนา เปิดใช้งาน Swagger ในโหมดการพัฒนา
if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); }
-
การใช้ HTTPS Redirection ใช้ HTTPS Redirection เพื่อความปลอดภัย
app.UseHttpsRedirection(); app.Run();
สรุป
การตั้งค่าใช้งานโปรเจกต์ JWT Token Authentication ใน ASP.NET Core โดยใช้ MySQL เป็นฐานข้อมูล ตั้งแต่การติดตั้งแพ็กเกจจนถึงการตั้งค่าการเชื่อมต่อฐานข้อมูลและการสร้าง API สำหรับการจัดการผู้ใช้ การใช้ JWT ช่วยให้เราสามารถรักษาความปลอดภัยของ API และจัดการการเข้าถึงได้อย่างมีประสิทธิภาพ
Source code
โค้ดทั้งหมดจะถูกจัดเก็บไว้ใน Github นี้ Link Github