ASP.NET Core 中的簡單授權

ASP.NET Core 中的授權由 [Authorize] 屬性及其各種參數來控制。 在最基本的形式中,將 [Authorize] 屬性套用到Razor 元件、控制器、動作或 Razor 頁面,限制了該元件的access僅限於已認證的使用者。

本文使用 BlazorRazor 元件範例,並聚焦於 Blazor 授權情境。 關於 Razor 頁面與MVC指引,請參閱本文後的以下資源:

[Authorize] 屬性

在 Blazor 應用程式中,請在 [Authorize] 元件檔案的頂端指定 Razor()。 以下範例中,只有已認證的使用者才能access該頁面:

@page "/"
@using Microsoft.AspNetCore.Authorization
@attribute [Authorize]

You can only see this if you're signed in.

這很重要

僅在透過 @page 路由器存取的 元件上使用 [Authorize]。 授權僅會以路由的層面執行,且不適用於在頁面內渲染的子元件。 若要授權頁面中特定部分的顯示,請使用 AuthorizeView 元件,詳見 ASP.NET Core Blazor 認證與授權。

[Authorize]此屬性也可透過匯入檔案_Imports.razor()套用至應用程式中Blazor的所有Razor元件或資料夾中的元件子集Razor。 為 @using 命名空間新增 @attribute 指示詞,並為 [Authorize] 屬性 新增 Microsoft.AspNetCore.Authorization 指示詞:

@using Microsoft.AspNetCore.Authorization
@attribute [Authorize]

屬性[Authorize]也支援角色型或原則型授權。 針對角色型授權,請使用 Roles 參數。 以下範例中,使用者只有在處於 Admin 或 Superuser 角色時,才能access該頁面:

@page "/"
@attribute [Authorize(Roles = "Admin, Superuser")]

<p>You can only see this if you're in the 'Admin' or 'Superuser' role.</p>

針對基於政策的授權,請使用參數 Policy 。 在以下範例中,使用者只有符合 Over21授權政策的要求時,才能access該頁面:

@page "/"
@attribute [Authorize(Policy = "Over21")]

<p>You can only see this if you satisfy the 'Over21' policy.</p>

如果未指定 Roles 和 Policy,[Authorize] 便會使用預設原則:

  • 已驗證 (已登入) 的使用者視為已授權。
  • 未驗證 (已登出) 的使用者視為未授權。

沒有授權元資料的端點不會使用預設的政策。 除非應用程式設定備用策略,否則這些端點不需要授權。 關於命名、預設及備援政策的比較,請參見 ASP.NET Core 中的基於政策的授權。

當使用者未獲得授權,且應用程式未 使用 Router 元件自定義未經授權的內容時,架構會自動顯示下列後援訊息:

Not authorized.

欲了解更多關於 Blazor 認證與授權的資訊,請參見 ASP.NET Core Blazor 認證與授權。

使用 屬性來允許未認證的使用者存取個別動作:

@using Microsoft.AspNetCore.Authorization
@attribute [AllowAnonymous]

對於大多數端點需要驗證的伺服器端應用程式,請參見 「要求全域使用者認證」。

其他資源