Untuk menjaga kompatibilitas dengan aplikasi yang ada, saya berencana menggunakan Cookie Middleware tanpa Identitas ASP.NET, seperti yang dijelaskan dalam dokumentasi:
https://docs.asp.net/en/latest/security/authentication/cookie.html
Ini tampaknya berfungsi seperti yang diharapkan saat memasukkan pengguna, tetapi saya mengalami masalah dengan peran -- khususnya saat menggunakan [Authorize(Roles = "ADMIN")]
.
Dalam kode di bawah ini, saya dapat memanggil p.IsInRole("ADMIN")
dan implementasi MyClaimsPrincipal.IsInRole()
saya dipanggil dan mengembalikan nilai true.
Yang tidak berfungsi adalah atribut [Authorize(Roles = "ADMIN")]
karena akhirnya memanggil ClaimsPrincipal.IsInRole
(yang mengembalikan False) alih-alih MyClaimsPrincipal.IsInRole()
(yang mengembalikan True).
[Authorize(Roles = "ADMIN")]
public class MyAdminController : Controller
{
public IActionResult Index()
{
var p = new MyClaimsPrincipal(ClaimsPrincipal.Current);
bool isAdmin = p.IsInRole("ADMIN");
return View();
}
}
Saat tidak menggunakan Identity dan hanya menggunakan Cookie Middleware, dapatkah saya menggunakan atribut
[Authorize(Roles = "ADMIN")]
?Bagaimana? :-)
Jika saya harus menebak, saya tidak menerapkan p.IsInRole()
dengan benar -- saat ini metode ini memuat peran, lalu mengembalikan Benar/Salah. Mungkin saya harus 'memuat' peran saya di tempat lain sedemikian rupa sehingga ClaimsPrincipal.IsInRole
sudah cukup. Jika saya menggunakan Identity(), saya berasumsi ini akan menjadi implementasi dari IUserRoleStore
.
Jawaban 'jika saya harus menebak' saya yang lain adalah di suatu tempat di startup.cs saya perlu mengganti ClaimsPrincipal
saat ini dengan instance MyClaimsPrincipal
.
Terima kasih!