C# Academy · บทเรียน

การกำหนดค่าการยืนยันตัวตน JWT Bearer

เชื่อมการตรวจสอบโทเค็นเข้ากับไปป์ไลน์

บทเรียน 2 จาก 413 ขั้นตอน

การกำหนดค่าการยืนยันตัวตน JWT Bearer เป็นบทเรียน C# Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C# Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C# Academy มีบทเรียนทั้งหมด 4 บทเรียน

ตัวจัดการ JWT Bearer

ASP.NET Core ตรวจสอบความถูกต้องของ JWT ขาเข้าโดยใช้ ตัวจัดการการยืนยันตัวตนด้วย JWT Bearer จากแพ็กเกจ Microsoft.AspNetCore.Authentication.JwtBearer

ตัวจัดการนี้อ่านโทเค็นจากส่วนหัว Authorization: Bearer ... ตรวจสอบความถูกต้อง แล้วสร้าง ClaimsPrincipal

dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer

AddAuthentication

การลงทะเบียนเริ่มต้นด้วย AddAuthentication คุณกำหนด แบบแผนเริ่มต้น เพื่อให้เฟรมเวิร์กทราบว่าควรใช้ตัวจัดการใดเมื่อไม่ได้ระบุแบบแผน

JwtBearerDefaults.AuthenticationScheme คือสตริง "Bearer"

builder.Services
    .AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer();

ตัวเลือก AddJwtBearer

รูปแบบของ AddJwtBearer รับตัวแทนตัวเลือก ซึ่งคุณใช้กำหนดค่าวิธีตรวจสอบความถูกต้องของโทเค็น

คุณสมบัติที่สำคัญที่สุดคือ TokenValidationParameters

builder.Services
    .AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.TokenValidationParameters = new TokenValidationParameters
        {
            // configured below
        };
    });

การตรวจสอบผู้ออกและกลุ่มผู้รับ

ตั้งค่า ValidateIssuer และ ValidateAudience เพื่อให้แน่ใจว่าโทเค็นมาจากหน่วยงานที่เชื่อถือได้และมีไว้สำหรับ API ของคุณ

ValidIssuer และ ValidAudience ต้องตรงกับข้อมูลอ้างสิทธิ์ iss และ aud ในโทเค็น

var tvp = new TokenValidationParameters
{
    ValidateIssuer = true,
    ValidIssuer = builder.Configuration["Jwt:Issuer"],
    ValidateAudience = true,
    ValidAudience = builder.Configuration["Jwt:Audience"]
};

การตรวจสอบคีย์สำหรับลงนาม

การตรวจสอบที่สำคัญที่สุดด้านความปลอดภัยคือ ValidateIssuerSigningKey ร่วมกับ IssuerSigningKey ซึ่งยืนยันว่าลายเซ็นถูกสร้างขึ้นด้วยข้อมูลลับของคุณ

สำหรับการลงนามแบบสมมาตร (HS256) ให้สร้าง SymmetricSecurityKey จากไบต์ของข้อมูลลับ

var key = new SymmetricSecurityKey(
    Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"]!));

tvp.ValidateIssuerSigningKey = true;
tvp.IssuerSigningKey = key;

การตรวจสอบอายุการใช้งาน

ValidateLifetime = true จะปฏิเสธโทเค็นที่หมดอายุโดยตรวจสอบข้อมูลอ้างสิทธิ์ exp และ nbf

ClockSkew เพิ่มค่าผ่อนผันสำหรับความแตกต่างของเวลาระหว่างเซิร์ฟเวอร์ ค่าเริ่มต้นคือ 5 นาที ควรลดค่านี้สำหรับโทเค็นที่มีอายุสั้น

tvp.ValidateLifetime = true;
tvp.ClockSkew = TimeSpan.FromSeconds(30);

นำทุกส่วนมารวมกัน

การกำหนดค่าแบบสมบูรณ์สำหรับใช้งานจริงจะรวมพารามิเตอร์การตรวจสอบความถูกต้องทั้งหมดไว้ในที่เดียว

builder.Services
    .AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidIssuer = builder.Configuration["Jwt:Issuer"],
            ValidateAudience = true,
            ValidAudience = builder.Configuration["Jwt:Audience"],
            ValidateIssuerSigningKey = true,
            IssuerSigningKey = new SymmetricSecurityKey(
                Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"]!)),
            ValidateLifetime = true,
            ClockSkew = TimeSpan.FromSeconds(30)
        };
    });

ลำดับมิดเดิลแวร์

การกำหนดค่าเพียงอย่างเดียวยังไม่เพียงพอ คุณต้องเพิ่มมิดเดิลแวร์สำหรับ การยืนยันตัวตน และ การอนุญาต ลงในลำดับการประมวลผล และลำดับก็มีความสำคัญ

UseAuthentication ต้องอยู่ก่อน UseAuthorization

var app = builder.Build();

app.UseAuthentication();
app.UseAuthorization();

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

การปกป้องจุดปลายทาง

เมื่อกำหนดค่าแล้ว ให้ทำเครื่องหมายจุดปลายทางด้วย [Authorize] (ตัวควบคุม) หรือ .RequireAuthorization() (API แบบมินิมอล) เพื่อกำหนดให้ต้องมีโทเค็นที่ถูกต้อง

app.MapGet("/me", (ClaimsPrincipal user) =>
        new { id = user.FindFirstValue(ClaimTypes.NameIdentifier) })
   .RequireAuthorization();

การใช้หน่วยงานที่เชื่อถือได้

หากโทเค็นของคุณมาจากผู้ให้บริการยืนยันตัวตนภายนอก เช่น Microsoft Entra ID หรือ Auth0 ให้ตั้งค่า Authority แทนการใช้คีย์แบบคงที่

จากนั้นตัวจัดการจะดาวน์โหลดคีย์สำหรับลงนามจากเอกสารค้นพบของผู้ให้บริการโดยอัตโนมัติ

.AddJwtBearer(options =>
{
    options.Authority = "https://login.myidp.com/";
    options.Audience = "my-api";
    // Keys are fetched from the OpenID configuration endpoint
});

การอ่านสาเหตุที่การตรวจสอบล้มเหลว

JWT Bearer จะเรียกใช้ เหตุการณ์ ที่คุณเชื่อมต่อเพื่อบันทึกเหตุการณ์หรือตอบกลับแบบกำหนดเองได้ เช่น OnAuthenticationFailed และ OnChallenge

options.Events = new JwtBearerEvents
{
    OnAuthenticationFailed = ctx =>
    {
        logger.LogWarning(ctx.Exception, "JWT validation failed");
        return Task.CompletedTask;
    }
};

ตรวจสอบความเข้าใจ

ตรวจสอบความเข้าใจเกี่ยวกับการกำหนดค่าลำดับการประมวลผล

ทบทวน

คุณได้กำหนดค่าการยืนยันตัวตนด้วย JWT Bearer แล้ว:

  • AddAuthentication(...).AddJwtBearer(...) ลงทะเบียนตัวจัดการ
  • TokenValidationParameters ควบคุมการตรวจสอบผู้ออก กลุ่มผู้รับ คีย์สำหรับลงนาม และอายุการใช้งาน
  • UseAuthentication() ต้องอยู่ก่อน UseAuthorization()
  • ใช้ Authority สำหรับผู้ให้บริการยืนยันตัวตนภายนอก

ต่อไป: วิธีออกโทเค็นของคุณเอง

เริ่มต้นได้ฟรี

เรียนรู้ C# ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
93
บทเรียน
346

คำถามที่พบบ่อย

บทเรียน “การกำหนดค่าการยืนยันตัวตน JWT Bearer” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การกำหนดค่าการยืนยันตัวตน JWT Bearer” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C# Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C# Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การกำหนดค่าการยืนยันตัวตน JWT Bearer”

เชื่อมการตรวจสอบโทเค็นเข้ากับไปป์ไลน์ คุณปฏิบัติ C# Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C# Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C# Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “การกำหนดค่าการยืนยันตัวตน JWT Bearer” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C# Academy นี้ได้ไหม

ได้ บทเรียน C# Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. โครงสร้างและข้ออ้างสิทธิ์ของ JWT
  2. การกำหนดค่าการยืนยันตัวตน JWT Bearer
  3. การออกโทเค็น
  4. โทเค็นรีเฟรชและวันหมดอายุ
← กลับไปที่ C# Academy