ASP.NET Core 中的簡單授權

ASP.NET Core 中的授權是由 AuthorizeAttribute 和其各種參數所控制。 在其最基本的表單中,將 [Authorize] 屬性套用至控制器、動作或 Razor 頁面,會限制對該元件已驗證使用者的存取。

下列程式碼會將存取許可權制為 AccountController 已驗證的使用者:

[Authorize]
public class AccountController : Controller
{
    public ActionResult Login()
    {
    }

    public ActionResult Logout()
    {
    }
}

如果您想要將授權套用至動作,而不是控制站,請將 AuthorizeAttribute 屬性套用至動作本身:

public class AccountController : Controller
{
   public ActionResult Login()
   {
   }

   [Authorize]
   public ActionResult Logout()
   {
   }
}

現在只有經過驗證的使用者可以存取函式 Logout

您也可以使用 AllowAnonymous 屬性來允許未經驗證的使用者存取個別動作。 例如:

[Authorize]
public class AccountController : Controller
{
    [AllowAnonymous]
    public ActionResult Login()
    {
    }

    public ActionResult Logout()
    {
    }
}

這只允許已驗證的使用者 AccountController ,除了 Login 可供所有人存取的動作之外,不論他們的驗證或未驗證/匿名狀態為何。

警告

[AllowAnonymous] 略過所有授權語句。 如果您結合 [AllowAnonymous] 了和任何 [Authorize] 屬性, [Authorize] 就會忽略屬性。 例如,如果您套用於 [AllowAnonymous] 控制器層級,則 [Authorize] 會忽略相同控制器上的任何屬性 (或它) 內的任何動作。

下列程式碼會將頁面的存取權限制 LogoutModel Razor 為已驗證的使用者:

[Authorize]
public class LogoutModel : PageModel
{
    public async Task OnGetAsync()
    {

    }

    public async Task<IActionResult> OnPostAsync()
    {

    }
}

如需如何全域要求所有使用者進行驗證的詳細資訊,請參閱 要求驗證的使用者

授權屬性和 Razor 頁面

AuthorizeAttribute無法 套用至 Razor 頁面處理常式。 例如, [Authorize] 無法套用至 OnGetOnPost 或任何其他頁面處理常式。 針對不同的處理常式,請考慮針對具有不同授權需求的頁面使用 ASP.NET Core 的 MVC 控制器。 需要不同的授權需求時,使用 MVC 控制器:

  • 是最不復雜的方法。
  • 是 Microsoft 所建議的方法。

如果您決定不要使用 MVC 控制器,下列兩種方法可以用來將授權套用至 Razor 頁面處理常式方法:

警告

PageHandlerAuth範例 方法不會:

  • 以套用至頁面、頁面模型或全域的授權屬性撰寫。 當您有一或多個 AuthorizeAttribute 實例也套用至頁面時,撰寫授權屬性會導致驗證和授權執行多次 AuthorizeFilter
  • 搭配 ASP.NET Core authentication 與授權系統的其餘部分一起使用。 您必須確認應用程式的使用方式正確。

沒有計劃支援 AuthorizeAttribute on Razor 頁面處理常式。