การอนุญาตตามนโยบาย
กำหนดนโยบายการอนุญาตที่นำกลับมาใช้ใหม่ได้
การอนุญาตตามนโยบาย เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การอนุญาตตามบทบาท
- การอนุญาตตามข้ออ้างสิทธิ์
- การอนุญาตตามนโยบาย
- ข้อกำหนดการอนุญาตแบบกำหนดเอง