设为首页 加入收藏

TOP

asp.net core系列 49 Identity 授权(上)(一)
2019-09-17 18:58:14 】 浏览:47
Tags:asp.net core 系列 Identity 授权

一.概述

         授权是指用户能够访问资源的权限,如页面数据的查看、编辑、新增、删除、导出、下载等权限。ASP.NET Core 授权提供了多种且灵活的方式,包括:Razor pages授权约定、简单授权、Role角色授权、Claim声明授权、Policy策略授权、资源授权、视图授权。

 

  1.1 Razor pages约定授权

    Razor pages约定授权用于Razor page应用程序,以及MVC中的Identity  Razor Pages库,不适应于MVC中的控制器和视图。如下图适用MVCIdentity Razor Pages库:

    

    对于Razor pages应用程序,访问权限可以在启动时使用授权约定(Startup.cs),这些约定可为用户授权,并允许匿名用户访问各个页面的文件夹。可以使用cookie 身份验证或ASP.NET Core Identity来进行授权约定。下面是MVC项目添加个人账户后,默认Razor pages约定授权配置如下:

      services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
              .AddRazorPagesOptions(options =>
              {
                  options.AllowAreas = true;
                  //需要授权的用户(登录成功),才能访问区域文件夹(Identity/Account/Manage)
                  options.Conventions.AuthorizeAreaFolder("Identity", "/Account/Manage");
                  //需要授权的用户(登录成功),才能访问区域页面(Identity/Account/Logout.cshtml)
                  options.Conventions.AuthorizeAreaPage("Identity", "/Account/Logout");
              });

    如果是Razor page应用程序,约定授权pages目录下的页面或文件夹(不带区域),如下所示:

 services.AddMvc()
    .AddRazorPagesOptions(options =>
    {
        //需要授权访问的页面和文件夹。
        options.Conventions.AuthorizePage("/Contact");
        options.Conventions.AuthorizeFolder("/Private");
        //允许匿名访问的页面和文件夹。
        options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
        options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
    })
    .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

     下面是组合授权和匿名访问:

     //授权访问的文件夹和允许匿名的文件
    .AuthorizeFolder("/Private").AllowAnonymousToPage("/Private/Public")    
     //允许匿名访问的文件夹和需要授权访问的文件
    .AllowAnonymousToFolder("/Public").AuthorizePage("/Public/Private")

  

  1.2 简单授权

    简单授权是任何经过身份验证的用户能够访问的资源。使用过滤器属性:授权[Authorize]或匿名[AllowAnonymous],[Authorize]对应AuthorizeFilter过滤器,在mvc中可以应用于一个action或Controller,在razor page中可以应用于一个页面模型类PageModel,但不能应用于页面处理程序方法。razor page中简单授权如下所示:

   //需要授权访问的Logout页面
    [Authorize]
    public class LogoutModel : PageModel
    {

   //允许匿名访问的Login页面
    [AllowAnonymous]
    public class LoginModel : PageModel
    {

     注意:对于约定授权和简单授权都是只针对,经过身份验证的用户都能访问的资源。也就是只要登录成功的用户都能访问的资源。

    

 

  1.3 基于role角色授权       

    当创建用户时,它可能属于一个或多个角色。比如:张三可能属于管理员和用户角色,同时李四只是用户角色。创建和管理这些角色取决于授权过程的后备存储,角色验证是通过ClaimsPrincipal类上的IsInRole方法,IsInRole检查当前用户属于该角色,返回bool类型。关联着role角色表、UserRole用户关联角色表。

    基于角色的授权检查是声明性的,声明在控制器或action上,检查当前用户请求资源的权限,用户关联角色, 检查角色成员拥有的权限。

    下面是限制AdministrationController,只有Administrator角色成员的用户才能访问:

    [Authorize(Roles = "Administrator")]
    public class AdministrationController : Controller
    {
    }

    多个角色指定为逗号分隔列表:

    [Authorize(Roles = "HRManager,Finance")]
    public class SalaryController : Controller
    {
    }

    在action级别应用其他角色授权属性,来进一步限制访问:

[Authorize(Roles = "Administrator, PowerUser")]
public class ControlPanelController : Controller
{
    public ActionResult SetTime()
    {
    }

    [Authorize(Roles = "Administrator")]
    public ActionResult ShutDown()
    {
    }
}

     还可以锁定控制器(简单授权),但允许匿名(未经身份验证)对单个action访问。

[Authorize]
public class ControlPanelController : Controller
{
    public ActionResult SetTime()
    {
    }

    [AllowAnonymous]
    pu
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇“宇宙最强” IDE,Visual Studio.. 下一篇Visual Studio 2019 正式版 更新..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目