ASP.NET Core中的简单授权

ASP.NET Core中的授权通过 [Authorize] 属性及其各种参数进行控制。 在最基本的形式中,将 [Authorize] 属性应用于 Razor 组件、控制器、动作或 Razor 页面,将对该组件的访问限制为已认证用户。

本文使用 BlazorRazor 组件示例,重点介绍 Blazor 授权方案。 有关 Razor Pages 和 MVC 指南,请参阅本文后面的以下资源:

[Authorize] 属性

在Blazor应用中,请在Razor组件文件(.razor)的顶部指定[Authorize]属性。 在以下示例中,只有经过身份验证的用户才能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]该属性还可以应用于应用中的所有Razor组件Blazor,也可以使用导入文件() 将属性应用于文件夹中的Razor组件子集。_Imports.razor[Authorize] 命名空间添加 @using 指令,并为 @attribute添加 指令:

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

[Authorize] 属性 还支持基于角色或基于策略的授权。 对于基于角色的授权,请使用 Roles 参数。 在以下示例中,用户只有在承担AdminSuperuser角色时,才能访问页面:

@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>

如果 RolesPolicy 均未指定,则 [Authorize] 使用默认策略:

  • 将经过身份验证(已登录)的用户视为已授权。
  • 将未经过身份验证(已注销)的用户视为未授权。

如果用户未获得授权,并且应用未 使用 Router 组件自定义未经授权的内容,框架会自动显示以下回退消息:

Not authorized.

有关 Blazor 身份验证和授权的详细信息,请参阅 ASP.NET Core Blazor 身份验证和授权

使用 [AllowAnonymous] 属性允许未经身份验证的用户访问个别操作:

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

有关如何要求对所有应用用户进行身份验证的信息,请参阅 创建具有受授权保护的用户数据的 ASP.NET Core应用

其他资源