Ủy quyền đơn giản trong ASP.NET Core MVC
Authorization (ủy quyền) trong ASP.NET Core được kiểm soát bằng thuộc tính [Authorize] và các tham số đa dạng của nó. Ở dạng cơ bản nhất, áp dụng thuộc tính [Authorize] cho một Razor component, controller, action, hay Razor Page giới hạn truy cập vào component đó chỉ cho người dùng đã xác thực.
Bài viết này đề cập các kịch bản liên quan đến ứng dụng MVC. Để xem phần trình bày chính về chủ đề này, xem Simple authorization in ASP.NET Core.
Thuộc tính [Authorize]
Ví dụ sau giới hạn truy cập cho người dùng đã xác thực bằng cách chỉ định thuộc tính [Authorize]:
[Authorize]
public class AccountController : Controller
{
public ActionResult Login() { ... }
public ActionResult Logout() { ... }
}Thuộc tính [Authorize] cũng hỗ trợ authorization dựa trên role (vai trò) hoặc policy (chính sách). Để authorization dựa trên role, sử dụng tham số Roles. Trong ví dụ sau, người dùng chỉ có thể truy cập trang nếu họ thuộc role Admin hoặc Superuser:
[Authorize(Roles = "Admin, Superuser")]
public class OrderController : Controller
{
...
}Để authorization dựa trên policy, sử dụng tham số Policy. Trong ví dụ sau, người dùng chỉ có thể truy cập trang nếu họ thỏa mãn các yêu cầu của authorization policy Over21:
[Authorize(Policy = "Over21")]
public class LicenseApplicationController : Controller
{
...
}Nếu không chỉ định cả Roles lẫn Policy, [Authorize] sử dụng policy mặc định:
- Người dùng đã xác thực (đã đăng nhập) được ủy quyền.
- Người dùng chưa xác thực (chưa đăng nhập) không được ủy quyền.
Để áp dụng authorization cho một action thay vì controller, áp dụng thuộc tính [Authorize] cho action. Trong ví dụ sau, chỉ người dùng đã xác thực mới có thể kích hoạt đăng xuất (gọi phương thức Logout):
public class AccountController : Controller
{
public ActionResult Login() { ... }
[Authorize]
public ActionResult Logout() { ... }
}Sử dụng thuộc tính [AllowAnonymous] để cho phép truy cập bởi người dùng chưa xác thực vào các action riêng lẻ:
[AllowAnonymous]
Cảnh báo: Đối với MVC controllers, thuộc tính [AllowAnonymous] bỏ qua các câu lệnh authorization. Nếu bạn kết hợp [AllowAnonymous] với một hoặc nhiều thuộc tính [Authorize], các thuộc tính [Authorize] sẽ bị bỏ qua. Nếu bạn áp dụng [AllowAnonymous] ở cấp độ controller:
- Bất kỳ yêu cầu authorization nào từ các thuộc tính [Authorize] trên cùng controller hay action methods trong controller đó đều bị bỏ qua.
- Authentication middleware (phần mềm trung gian xác thực) không bị rút ngắn nhưng không cần phải thành công.
Để biết thông tin về cách yêu cầu xác thực cho tất cả người dùng ứng dụng, xem Create an ASP.NET Core app with user data protected by authorization.