IdentityServer4深入使用(二)-- 认证与授权(下)

本文深入探讨了IdentityServer4的授权机制,包括基于角色和策略的授权。介绍了如何添加角色,使用角色进行授权,以及配置自定义策略以实现更复杂的授权逻辑。此外,还详细阐述了如何在策略中使用参数,提高授权的灵活性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文地址:https://www.jeremyjone.com/790/,转载请注明


开始之前

上篇文章已经学习了如何认证,本篇将深入学习如何授权,如果需要继续理解认证的,包括基础认证,JWT 认证,以及如何在 .Net 项目中使用认证的,都可以看 上篇文章

更多学习内容,可以看我的 .NET 学习之路系列-认证与授权

授权

授权通常是针对用户可执行的操作。在 .NET 的解决方案中,授权的使用是非常简单的。它通过 AuthorizeAttribute 和其各种参数来控制。

所有的授权都是在认证之后的,如果开启了授权,而没有提供认证方案,则会报错。
下面的代码,都默认已经配置好了 JWT 认证方案。

授权的使用

其最简单的形式就是将 [Authrize] 属性应用于控制器、操作或 Razor 页面。

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

    public ActionResult Logout()
    {
   
   
    }
}

如果要对操作应用授权而非控制器,则置于操作本身即可:

public class AccountController : Controller
{
   
   
   public ActionResult Login()
   {
   
   
   }

   [Authorize]
   public ActionResult Logout()
   {
   
   
   }
}

对于控制器需要权限,而里面某些应用不需要授权的情况,使用 [AllowAnonymous] 属性进行控制:

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

    public ActionResult Logout()
    {
   
   
    }
}

AllowAnonymous 属性会跳过所有授权语句,如果它与 Authorize 组合使用,则会忽略 Authorize 属性,并且该效果向下兼容。

基于角色授权

想要使用角色授权,首先要在令牌中添加角色:

具体代码可以看 示例代码

添加角色
var token = new JwtSecurityToken(
issuer: "jeremyjone@qq.com",
audience: "jeremyjone",
expires: DateTime.UtcNow.AddHours(1),
signingCredentials: new SigningCredentials(key, SecurityAlgorithms.HmacSha256),
claims: new Claim[]
{
   
   
    // 角色需要在这里填写
    new Claim(ClaimTypes.Role, "Admin"),
    // 多个角色可以重复写,生成的 JWT 会是一个数组
    new Claim(ClaimTypes.Role, "Super")
});
使用角色进行授权

[Authorize] 后面跟上角色参数,即可使用角色授权。

// 只有角色为 Admin 的用户可以使用
[Authorize(</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值