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

一,简单授权

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

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

    public ActionResult Logout()
    {
    }
}

在这里插入图片描述
这表示只有经过身份验证的用户才可以访问,当然身份验证的部分,暂时不讨论,有兴趣可以去看官方文档:身份验证

你还可以使用 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>(),这里的Role是角色类,他继承的是IdentityRole类,这个类是自动生成,

2.使用角色授权

在需要授权的位置添加[Authorize(Roles = "Admin")]即可,注意!这里的演示是博主的角色名字,具体的名字需要自己判断,不过,一般自动生成的都是这样
在这里插入图片描述

三,基于声明授权

使用标识框架自动生成的表中,你可以看到以下几种表:
在这里插入图片描述
其中带有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")));

四,基于策略授权

待续…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

栀梦星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值