原文地址: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(</