ASP.NET Core标识框架中的授权

一,简单授权

简单授权只是在控制器上加上[Authorize]

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

    public ActionResult Logout()
    {
    }
}

ASP.NET Core标识框架中的授权_第1张图片
这表示只有经过身份验证的用户才可以访问,当然身份验证的部分,暂时不讨论,有兴趣可以去看官方文档:身份验证

你还可以使用 AllowAnonymous 属性来允许未经身份验证的用户访问单个操作。 例如:

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

    public ActionResult Logout()
    {
    }
}

二,基于角色授权

我们使用标识框架创建时,会自动生成很多表,其中就有角色表,一个用户可以有多个角色,我们可以通过配置角色来进行授权,就是用户有这个角色Admin,这个接口就能访问的到,如果没有,那就不能,会报错403

1.添加配置角色服务

            services.AddIdentityCore<User>(options =>
            {
                // 对密码复杂度苛刻设置
                options.Password.RequireDigit = false;
                options.Password.RequireLowercase = false;
                options.Password.RequireNonAlphanumeric = false;
                options.Password.RequireUppercase = false;
                options.Password.RequiredLength = 6;
                options.Tokens.PasswordResetTokenProvider = TokenOptions.DefaultEmailProvider;
                options.Tokens.EmailConfirmationTokenProvider = TokenOptions.DefaultEmailProvider;
            }).AddRoles<Role>();

中间的内容是身份验证的密码配置,主要是AddRoles(),这里的Role是角色类,他继承的是IdentityRole类,这个类是自动生成,

2.使用角色授权

在需要授权的位置添加[Authorize(Roles = "Admin")]即可,注意!这里的演示是博主的角色名字,具体的名字需要自己判断,不过,一般自动生成的都是这样
ASP.NET Core标识框架中的授权_第2张图片

三,基于声明授权

使用标识框架自动生成的表中,你可以看到以下几种表:
在这里插入图片描述
其中带有Claims的表分别是用户所拥有的声明和角色所拥有的声明,他的表结构是这样的:

在这里插入图片描述
声明Claims可以简单理解为一个名称值对,只是表示用户可以是什么,或者这个角色是什么,我来举个例子:
身份证大家都有吧,那里面的姓名:张三,性别:男等都是名称值对,对吧,它们只是表示你是张三,你的性别是男
当然,这只是比较浅显的说法,具体我是看这个博主的文章了解的:添加链接描述

好,现在来进行配置

1.配置声明检查

            //配置基于策略和声明的授权
            builder.Services.AddAuthorization(options =>                                 
            {
                
                //声明授权
                options.AddPolicy("MusicPower", policy => policy.RequireClaim("music"));

            });

该策略名称为MusicPower,要求用户具有声明music,具体music对应的值是多少,不关心,只要有这个声明就行

当然,我们也可以将music的值限定一下:

options.AddPolicy("MusicPower", policy => policy.RequireClaim("music", "m1"));

2.使用声明授权

在需要授权的位置添加[Authorize(Policy = "MusicPower")]即可

// 仅要求用户具有声明“Rank”,不关心值是多少
[Authorize(Policy = "MusicPower")]
public string GetForMusicPower()
{
    return "";
}

// 要求用户具有声明“Rank”,且值为“M3”
[HttpGet("/Music")]
[Authorize(Policy = "MusicPower")]
public string GetForMusicPower2()
{
    return "";
}


另外,有时候声明策略略微有些复杂,可以使用RequireAssertion来实现:

options.AddPolicy("MusicPower", policy => policy.RequireAssertion(context =>
    context.User.HasClaim(c => (c.Type == "music" || c.Type == "Name") && c.Issuer == "Issuer")));

四,基于策略授权

待续…

你可能感兴趣的:(C#自学,asp.net,java,前端)