1️⃣ Microsoft.AspNetCore.Authentication.JwtBearer คืออะไร

By suparat · 08 Oct 2025


ยอดมากครับ 😎 คำถามนี้คือระดับมืออาชีพเลย —
เรามาเรียน Microsoft.AspNetCore.Authentication.JwtBearer แบบเข้าใจลึก + มีตัวอย่างครบทั้ง การตั้งค่า + Controller + Token Generator


🔥 1️⃣ Microsoft.AspNetCore.Authentication.JwtBearer คืออะไร

เป็น middleware ใน ASP.NET Core
ใช้สำหรับ “ตรวจสอบความถูกต้องของ JWT (JSON Web Token)” ที่แนบมากับ Header ของ Request

JWT มักใช้ในระบบ Login / Authentication แบบ Token-based เช่น:

  • Web API / Mobile API

  • React / Angular Frontend ที่ไม่ใช้ Session

  • ระบบ Single Sign-On (SSO)


🧩 2️⃣ โครงสร้างของ JWT (JSON Web Token)

JWT คือข้อความที่เข้ารหัสแบบ Base64Url แบ่งเป็น 3 ส่วน:

HEADER.PAYLOAD.SIGNATURE

ตัวอย่าง:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxMjMiLCJuYW1lIjoiSmVuIE1haSJ9._GvbEJYVk1J... (ยาว)
  • Header → ระบุ algorithm (เช่น HS256)

  • Payload → ข้อมูลผู้ใช้ เช่น id, role, exp

  • Signature → ลายเซ็นป้องกันการปลอมแปลง


⚙️ 3️⃣ การติดตั้ง NuGet

dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer

🧱 4️⃣ ตัวอย่างโปรเจกต์ ASP.NET Core API (net8.0)

Program.cs

using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.IdentityModel.Tokens;
using System.Text;

var builder = WebApplication.CreateBuilder(args);

// Secret key
var key = "super_secret_key_12345"; 

// ✅ เพิ่ม Authentication แบบ JWT
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidateAudience = true,
            ValidateLifetime = true,
            ValidateIssuerSigningKey = true,
            ValidIssuer = "yourapp.com",
            ValidAudience = "yourapp.com",
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(key))
        };
    });

builder.Services.AddControllers();

var app = builder.Build();

app.UseAuthentication(); // ✅ ต้องอยู่ก่อน Authorization
app.UseAuthorization();

app.MapControllers();
app.Run();

🪪 5️⃣ Controller สร้าง Token (Login)

using Microsoft.AspNetCore.Mvc;
using Microsoft.IdentityModel.Tokens;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;

[Route("api/[controller]")]
[ApiController]
public class AuthController : ControllerBase
{
    [HttpPost("login")]
    public IActionResult Login([FromBody] LoginModel model)
    {
        // ตัวอย่างตรวจสอบ username/password
        if (model.Username != "admin" || model.Password != "1234")
            return Unauthorized();

        var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("super_secret_key_12345"));
        var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

        var claims = new[]
        {
            new Claim(JwtRegisteredClaimNames.Sub, model.Username),
            new Claim(ClaimTypes.Role, "Administrator"),
            new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
        };

        var token = new JwtSecurityToken(
            issuer: "yourapp.com",
            audience: "yourapp.com",
            claims: claims,
            expires: DateTime.Now.AddMinutes(30),
            signingCredentials: creds
        );

        return Ok(new
        {
            token = new JwtSecurityTokenHandler().WriteToken(token)
        });
    }
}

public class LoginModel
{
    public string Username { get; set; }
    public string Password { get; set; }
}

🔹 เมื่อเรียก POST /api/auth/login
จะได้ JWT Token กลับมา เช่น

{
  "token": "eyJhbGciOiJIUzI1NiIs..."
}

🛡️ 6️⃣ Controller ที่ต้องการ Auth

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;

[Route("api/[controller]")]
[ApiController]
public class SecureController : ControllerBase
{
    [HttpGet]
    [Authorize] // ✅ ต้องแนบ JWT ถึงเข้าได้
    public IActionResult GetSecureData()
    {
        var username = User.Identity?.Name ?? "Unknown";
        return Ok($"สวัสดี {username}, คุณเข้าถึงข้อมูลลับได้แล้ว!");
    }

    [HttpGet("admin")]
    [Authorize(Roles = "Administrator")] // ✅ ตรวจ Role
    public IActionResult GetAdminData()
    {
        return Ok("ข้อมูลสำหรับ Admin เท่านั้น!");
    }
}

🧠 7️⃣ การทดสอบด้วย Postman / Frontend

  1. เรียก POST /api/auth/login → จะได้ JWT

  2. ใช้ JWT ใน Header ของ Request อื่น:

Authorization: Bearer eyJhbGciOiJIUzI1NiIs...

🔍 8️⃣ สรุปภาพรวมการทำงาน

Client → POST /login → ได้ JWT Token
Client → แนบ Token ใน Header → GET /secure
Server → ตรวจสอบ Token ด้วย JwtBearerMiddleware
→ ถ้า valid → Controller ทำงาน
→ ถ้า invalid → 401 Unauthorized

🧩 9️⃣ ปัญหาที่พบบ่อย

อาการ สาเหตุ วิธีแก้
401 Unauthorized Token ผิด / หมดอายุ ตรวจสอบ exp หรือ secret key
Signature validation failed Key ฝั่งสร้าง-ฝั่งตรวจไม่ตรงกัน ใช้ key เดียวกัน
No authenticationScheme specified ลืม app.UseAuthentication() ใส่ app.UseAuthentication(); ก่อน app.UseAuthorization();
Token lifetime validation failed Token หมดอายุ สร้างใหม่

✅ 10️⃣ สรุป

หัวข้อ สรุป
Package Microsoft.AspNetCore.Authentication.JwtBearer
หน้าที่ ตรวจสอบ JWT Token
ใช้ใน API ที่ต้อง Login
ขั้นตอนหลัก 1. สร้าง Token → 2. แนบใน Header → 3. ตรวจสอบด้วย Middleware
จุดเด่น ปลอดภัย, ไม่ต้องใช้ Session, ทำงานข้าม Platform ได้

หากคุณต้องการ 👉
ผมสามารถสร้าง โปรเจกต์ ASP.NET Core Web API JWT Authentication แบบครบระบบ
มี Login / Refresh Token / Role / Policy พร้อม Swagger ตัวอย่างให้ใช้งานได้เลย

อยากให้ผมสร้างโปรเจกต์ตัวอย่างแบบนั้นไหมครับ? 😎

1️⃣ Microsoft.AspNetCore.Authentication.JwtBearer คืออะไร
Web hosting by Somee.com