เพื่อรักษาความเข้ากันได้กับแอปพลิเคชันที่มีอยู่ ฉันวางแผนที่จะใช้ Cookie Middleware โดยไม่มี ASP.NET Identity ตามที่อธิบายไว้ในเอกสารประกอบ:
https://docs.asp.net/en/latest/security/authentication/cookie.html
ดูเหมือนว่าจะทำงานได้ตามที่คาดไว้ตราบใดที่ผู้ใช้เข้าสู่ระบบ แต่ฉันมีปัญหากับบทบาท โดยเฉพาะเมื่อใช้ [Authorize(Roles = "ADMIN")]
ในโค้ดด้านล่าง ฉันสามารถเรียก p.IsInRole("ADMIN")
และเรียกใช้ MyClaimsPrincipal.IsInRole()
ของฉันและคืนค่าเป็นจริง
สิ่งที่ใช้ไม่ได้คือแอตทริบิวต์ [Authorize(Roles = "ADMIN")]
เนื่องจากท้ายที่สุดแล้วจะเรียก ClaimsPrincipal.IsInRole
(ซึ่งส่งกลับค่า False) แทนที่จะเป็น MyClaimsPrincipal.IsInRole()
(ซึ่งส่งกลับค่า True)
[Authorize(Roles = "ADMIN")]
public class MyAdminController : Controller
{
public IActionResult Index()
{
var p = new MyClaimsPrincipal(ClaimsPrincipal.Current);
bool isAdmin = p.IsInRole("ADMIN");
return View();
}
}
เมื่อไม่ได้ใช้ Identity และใช้เฉพาะ Cookie Middleware ฉันสามารถใช้แอตทริบิวต์
[Authorize(Roles = "ADMIN")]
ได้หรือไม่ยังไง? :-)
หากฉันต้องเดา ฉันใช้ p.IsInRole()
ไม่ถูกต้อง ขณะนี้เมธอดนี้โหลดบทบาท แล้วส่งคืน True/False บางทีฉันอาจต้อง 'โหลด' บทบาทของฉันไปที่อื่นเพื่อให้ ClaimsPrincipal.IsInRole
นั้นเพียงพอ ถ้าฉันใช้ Identity() ฉันคิดว่านี่จะเป็นการใช้งาน IUserRoleStore
คำตอบ 'ถ้าฉันต้องเดา' อื่น ๆ ของฉันคือที่ไหนสักแห่งใน startup.cs ฉันต้องแทนที่ ClaimsPrincipal
ปัจจุบันด้วยอินสแตนซ์ของ MyClaimsPrincipal
ขอบคุณ!