NET6 授权方式:简单/角色/策略
Claims
// 1.定义需要使用到的Claims var claims = new List<Claim> { new Claim("Name", "UserName"), new Claim(ClaimTypes.Role, "Admin"), new Claim(ClaimTypes.Role, "admin"), // 严格区分大小写 //new Claim(ClaimTypes.Role, "user"), // ... };
授权:简单
控制器级别
[Authorize] public class AccountController : Controller { public ActionResult Login() { } public ActionResult Logout() { } }
操作(Action)级别
public class AccountController : Controller { public ActionResult Login() { } [Authorize] public ActionResult Logout() { } }
授权:角色
角色叠加:控制器 + Action
/// <summary> /// 授权api - 角色:控制器有角色,必须要有user角色才能访问 /// jwt token角色的key必须用ClaimTypes.Role,且值和Roles区分大小写 /// </summary> [ApiController, Route("api/roleexists"), Authorize(Roles = "user")] public class RoleExistsController : ControllerBase { /// <summary> /// 与控制器的Authorize叠加作用,除了拥有user,还需拥有admin /// </summary> /// <returns></returns> [HttpGet, Route("getadminanduser"), Authorize(Roles = "admin")] public ActionResult<string> GetAdminAndUser() { return "GetAdminAndUser"; } }
角色多选一,满足一个就行
/// <summary> /// 授权api - 角色: 控制器存在授权角色 /// jwt token角色的key必须用ClaimTypes.Role,且值和Roles区分大小写 /// </summary> [ApiController, Route("api/rolenotexists")] public class RoleNotExistsController : ControllerBase { /// <summary> /// user 或 admin 其一满足即可 /// </summary> /// <returns></returns> [HttpGet, Route("getadminoruser"), Authorize(Roles = "user,admin")] public ActionResult<string> GetAdminOrUser() { return "GetAdminOrUser"; } }
授权:策略
注册
builder.Services.AddAuthorization(options => { // 策略1:声明中一定要有 ClaimTypes.Role options.AddPolicy("policy1", policy => policy.RequireClaim(ClaimTypes.Role)); // 策略2:声明中一定要有 ClaimTypes.Role,且,值要包含:"admin", "user" options.AddPolicy("policy2", policy => policy.RequireClaim(ClaimTypes.Role, "admin", "user")); });
使用
[ApiController, Route("api/policy")] public class PolicyController : ControllerBase { /// <summary> /// Policy1 /// </summary> /// <returns></returns> [HttpGet, Route("policy1"), Authorize(Policy = "policy1")] public ActionResult<string> Policy1() { return "Policy1"; } /// <summary> /// Policy2 /// </summary> /// <returns></returns> [HttpGet, Route("policy2"), Authorize(Policy = "policy2")] public ActionResult<string> Policy2() { return "Policy2"; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 提示词工程——AI应用必不可少的技术
· 地球OL攻略 —— 某应届生求职总结
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界