0Pricing
C# Academy · บทเรียน

การอนุญาตตามนโยบาย

กำหนดนโยบายการอนุญาตที่นำกลับมาใช้ใหม่ได้

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

แบบจำลองนโยบาย

ใน ASP.NET Core การตรวจสอบการอนุญาตทุกครั้งท้ายที่สุดจะทำงานผ่านนโยบาย แอตทริบิวต์บทบาทและ claims เป็นรูปแบบย่อที่สร้างนโยบายอยู่เบื้องหลัง

การกำหนดนโยบายที่ตั้งชื่อไว้ช่วยรวมกฎไว้เป็นศูนย์กลางและทำให้ตัวควบคุมสะอาดเรียบร้อย

[Authorize(Policy = "CanManageOrders")]

AddAuthorization

ลงทะเบียนนโยบายในคอนเทนเนอร์บริการด้วย AddAuthorization โดยนโยบายแต่ละรายการจะมีชื่อที่ไม่ซ้ำกัน

builder.Services.AddAuthorization(options =>
{
    options.AddPolicy("CanManageOrders", policy =>
        policy.RequireRole("admin", "sales"));
});

RequireAuthenticatedUser

ข้อกำหนดพื้นฐานที่สุดคือผู้ใช้ต้องลงชื่อเข้าใช้แล้ว RequireAuthenticatedUser จะปฏิเสธคำขอจากผู้ใช้ที่ไม่ระบุตัวตน

options.AddPolicy("SignedIn", policy =>
    policy.RequireAuthenticatedUser());

การประกอบข้อกำหนด

ตัวสร้างนโยบายสามารถต่อข้อกำหนดหลายรายการเข้าด้วยกัน นโยบายจะสำเร็จเมื่อทุกข้อกำหนดผ่านเท่านั้น

options.AddPolicy("SeniorEditor", policy =>
    policy
        .RequireAuthenticatedUser()
        .RequireRole("editor")
        .RequireClaim("seniority", "senior"));

นโยบายเริ่มต้น

[Authorize] ที่ไม่มีอาร์กิวเมนต์จะใช้งานนโยบายเริ่มต้น ซึ่งตามค่าเริ่มต้นจะกำหนดเพียงว่าผู้ใช้ต้องผ่านการยืนยันตัวตนแล้ว คุณสามารถแทนที่นโยบายนี้ได้

options.DefaultPolicy = new AuthorizationPolicyBuilder()
    .RequireAuthenticatedUser()
    .RequireClaim("email_verified", "true")
    .Build();

นโยบายสำรอง

นโยบายสำรองใช้กับปลายทางที่ไม่มีแอตทริบิวต์การอนุญาตใด ๆ เลย เป็นวิธีที่มีประสิทธิภาพในการกำหนดให้ระบบปลอดภัยเป็นค่าเริ่มต้น

options.FallbackPolicy = new AuthorizationPolicyBuilder()
    .RequireAuthenticatedUser()
    .Build();
// Now every endpoint requires auth unless marked [AllowAnonymous]

การยกเว้นด้วย AllowAnonymous

เมื่อนโยบายสำรองล็อกทุกอย่างไว้ ให้ใช้ [AllowAnonymous] เพื่อเปิดเผยปลายทางสาธารณะ เช่น การเข้าสู่ระบบหรือการตรวจสอบสถานะระบบ

[AllowAnonymous]
[HttpGet("health")]
public IActionResult Health() => Ok("healthy");

การใช้นโยบายกับปลายทาง

อ้างอิงนโยบายด้วยชื่อผ่านแอตทริบิวต์หรือส่วนขยายของ API แบบย่อ

// Controller
[Authorize(Policy = "SeniorEditor")]
public IActionResult Publish() => Ok();

// Minimal API
app.MapPost("/publish", () => Results.Ok())
   .RequireAuthorization("SeniorEditor");

การจัดกลุ่มปลายทาง

ใช้นโยบายกับกลุ่มเส้นทางทั้งหมด เพื่อให้ปลายทางทุกแห่งภายในกลุ่มสืบทอดนโยบายดังกล่าว

var admin = app.MapGroup("/admin")
               .RequireAuthorization("CanManageOrders");

admin.MapGet("/stats", () => Results.Ok());
admin.MapDelete("/{id}", (int id) => Results.NoContent());

ข้อกำหนดเบื้องหลังการทำงาน

การเรียก Require* แต่ละครั้งจะเพิ่ม IAuthorizationRequirement ลงในนโยบาย ตัวจัดการที่ตรงกันจะประเมินข้อกำหนดแต่ละรายการ สำหรับฟังก์ชันที่มีมาให้ กระบวนการนี้จะทำโดยอัตโนมัติ ส่วนกฎแบบกำหนดเองต้องใช้ตัวจัดการแบบกำหนดเอง (ในบทเรียนถัดไป)

// RequireRole("admin") adds a RolesAuthorizationRequirement
// RequireClaim(...) adds a ClaimsAuthorizationRequirement

ควรกำหนดนโยบายไว้ที่ใด

รวมคำจำกัดความของนโยบายทั้งหมดไว้ในเมธอดส่วนขยายรายการเดียว เพื่อให้ค้นหาและทดสอบได้ง่าย

public static IServiceCollection AddAppPolicies(
    this IServiceCollection services)
{
    services.AddAuthorization(o =>
    {
        o.AddPolicy("SignedIn", p => p.RequireAuthenticatedUser());
        o.AddPolicy("CanManageOrders", p => p.RequireRole("admin"));
    });
    return services;
}

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

ตรวจสอบความเข้าใจเกี่ยวกับนโยบายเริ่มต้นและนโยบายสำรอง

สรุปทบทวน

คุณได้เรียนรู้การอนุญาตตามนโยบาย:

  • AddPolicy ใช้กำหนดกฎที่ตั้งชื่อไว้และนำกลับมาใช้ซ้ำได้
  • RequireAuthenticatedUser, RequireRole และ RequireClaim ประกอบกันด้วยความหมายแบบ AND
  • DefaultPolicy อยู่เบื้องหลัง [Authorize] แบบไม่มีอาร์กิวเมนต์ ส่วน FallbackPolicy ใช้รักษาความปลอดภัยให้ปลายทางที่ไม่ได้ทำเครื่องหมายไว้
  • [AllowAnonymous] ใช้ยกเว้นปลายทางจากนโยบาย

ถัดไป: ข้อกำหนดและตัวจัดการการอนุญาตแบบกำหนดเอง

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

บทเรียน “การอนุญาตตามนโยบาย” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การอนุญาตตามนโยบาย”

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

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

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

บทเรียน “การอนุญาตตามนโยบาย” ใช้เวลานานแค่ไหน

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

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

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

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

  1. การอนุญาตตามบทบาท
  2. การอนุญาตตามข้ออ้างสิทธิ์
  3. การอนุญาตตามนโยบาย
  4. ข้อกำหนดการอนุญาตแบบกำหนดเอง
← กลับไปที่ C# Academy