ASP.NET Core 中的授权通过 [Authorize] 属性及其各种参数控制。 在其最基本的形式中,通过向控制器、操作或 [Authorize]
Page 应用 Razor 属性,可限制为仅允许经过身份验证的用户访问该组件。
使用 [Authorize]
属性
以下代码限制为仅允许经过身份验证的用户访问 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()
{
}
}