39-Role以及Claims授权
asp.net core多鼓励使用claims授权
1-使用role授权
在类或方法上贴上Roles,这样就知道有user的角色才可以访问
- [Authorize(Roles="user")]
- public class ValuesController : ControllerBase
在登陆时给用户分配对应的角色 new Claim(ClaimTypes.Role,"admin")
- public IActionResult Token(LoginViewModel loginViewModel){
- if(ModelState.IsValid) {
- if(loginViewModel.User!="qinzb" && loginViewModel.Password!=""){
- return BadRequest();
- }
- var claims = new Claim[]{
- new Claim(ClaimTypes.Name,"qinzb"),
- new Claim(ClaimTypes.Role,"admin")
- };
- var key = new Microsoft.IdentityModel.Tokens.SymmetricSecurityKey
- (System.Text.Encoding.UTF8.GetBytes(_jwtSettings.SecretKey));
- var creds = new Microsoft.IdentityModel.Tokens.SigningCredentials
- (key, Microsoft.IdentityModel.Tokens.SecurityAlgorithms.HmacSha256);
- var token = new System.IdentityModel.Tokens.Jwt.JwtSecurityToken(
- _jwtSettings.Issure,
- _jwtSettings.Audience,
- claims,
- null,
- DateTime.Now.AddMinutes(),
- creds
- );
- return Ok(new {token = new JwtSecurityTokenHandler().WriteToken(token)});
- }
- return BadRequest();
- }
如果没有访问方法的对应角色,则返回如下提示
基于claims授权,只需要多加
- services.AddAuthorization(options=>{
- options.AddPolicy("SuperAdminOnly",policy=>policy.RequireClaim("SuperAdminOnly"));
- });
完整代码
- public void ConfigureServices(IServiceCollection services)
- {
- services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
- services.Configure<JwtSettings>(Configuration.GetSection("JwtSettings"));
- var jwtSetting = new JwtSettings();
- Configuration.Bind("JwtSettings",jwtSetting);
- services.AddAuthentication(options=>{
- options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
- options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
- })
- .AddJwtBearer(jwtOption=>{
- jwtOption.TokenValidationParameters=new Microsoft.IdentityModel.Tokens.TokenValidationParameters{
- ValidIssuer = jwtSetting.Issure,
- ValidAudience = jwtSetting.Audience,
- IssuerSigningKey = new Microsoft.IdentityModel.Tokens.SymmetricSecurityKey(
- System.Text.Encoding.UTF8.GetBytes(jwtSetting.SecretKey)
- )
- };
- // jwtOption.SecurityTokenValidators.Clear();
- // jwtOption.SecurityTokenValidators.Add(new MyTokenValidator());
- // jwtOption.Events = new JwtBearerEvents(){
- // OnMessageReceived = Context=>{
- // var token = Context.Request.Headers["token"];
- // Context.Token = token;
- // return Task.CompletedTask;
- // }
- // };
- });
- services.AddAuthorization(options=>{
- options.AddPolicy("SuperAdminOnly",policy=>policy.RequireClaim("SuperAdminOnly"));
- });
- }
2-在需要的类上启用claims, Policy表示只用SuperAdminOnly的才能访问
- [Authorize(Policy="SuperAdminOnly")]
- public class ValuesController : ControllerBase
3-在登陆时给对应的类增加policy,这样可以访问带有[Authorize(Policy="SuperAdminOnly")
- var claims = new Claim[]{
- new Claim(ClaimTypes.Name,"qinzb"),
- new Claim(ClaimTypes.Role,"admin"), //基于角色
- new Claim("SuperAdminOnly","true") //基于policy
- };
39-Role以及Claims授权的更多相关文章
- 任务39:Role以及Claims授权
基于Role角色的授权 asp.net core在逐渐淘汰这种基于RoleBase的基于角色的授权.鼓励大家使用基于Claim的授权 在认证的时候Cliam已经加入了Role 注释38节课的 自定义验 ...
- 5.3Role和Claims授权「深入浅出ASP.NET Core系列」
希望给你3-5分钟的碎片化学习,可能是坐地铁.等公交,积少成多,水滴石穿,码字辛苦,如果你吃了蛋觉得味道不错,希望点个赞,谢谢关注. Role授权 这是一种Asp.Net常用的传统的授权方法,当我们在 ...
- IdentityServer4-MVC+Hybrid实现Claims授权验证(四)
上节以对话形式,大概说了几种客户端授权模式的原理,这节重点介绍Hybrid模式在MVC下的使用.且为实现IdentityServer4从数据库获取User进行验证,并对Claim进行权限设置打下基础( ...
- IdentityServer4-EF动态配置Client和对Claims授权(二)
本节介绍Client的ClientCredentials客户端模式,先看下画的草图: 一.在Server上添加动态新增Client的API 接口. 为了方便测试,在Server服务端中先添加swagg ...
- ASP.NET Core快速入门(第5章:认证与授权)--学习笔记
课程链接:http://video.jessetalk.cn/course/explore 良心课程,大家一起来学习哈! 任务31:课时介绍 1.Cookie-based认证与授权 2.Cookie- ...
- ASP.NET Core快速入门_学习笔记汇总
第2章 配置管理 任务12:Bind读取配置到C#实例 任务13:在Core Mvc中使用Options 任务14:配置的热更新 任务15:配置框架设计浅析 第3章 依赖注入 任务16:介绍- 任务1 ...
- 【笔记目录1】【jessetalk 】ASP.NET Core快速入门_学习笔记汇总
当前标签: ASP.NET Core快速入门 共2页: 1 2 下一页 任务50:Identity MVC:DbContextSeed初始化 GASA 2019-03-02 14:09 阅读:16 ...
- ASP.NET Core微服务实战系列
希望给你3-5分钟的碎片化学习,可能是坐地铁.等公交,积少成多,水滴石穿,码字辛苦,如果你吃了蛋觉得味道不错,希望点个赞,谢谢关注. 前言 这里记录的是个人奋斗和成长的地方,该篇只是一个系列目录和构想 ...
- 【ASP.NET Core快速入门】(十二)JWT 设计解析及定制
前言 上一节我们讲述的书如何使用jwt token,而且上一节的token是要加Authorization:bearer XXXXXXXXXXXX才能访问. 这一节我们来研究如何自定义类似jwt的to ...
随机推荐
- Angular5+ 自定义表单验证器
Angular5+ 自定义表单验证器 Custom Validators 标签(空格分隔): Angular 首先阐述一下遇到的问题: 怎样实现"再次输入密码"的验证(两个cont ...
- HCNA多区域OSPF配置
1.拓扑图 2.各路由器配置角本 ospf 多区域配置 #R5配置 sys sysname AR5 interface s2// ip add 10.0.35.5 255.255.255.0 inte ...
- 初涉京东及淘宝开放平台API-商品模型
============ 京东 ============ [Product]http://help.jd.com/jos/question-568.html#A2ware_id(相当于SPU?)sku ...
- 移动端调试工具weinre
前段时间在大豹公众号上看到一个关于移动端调试的工具,了解了一下,确实不错. npm install -g weinre 先全局安装,然后使用的时候通过如下命令启动 weinre --boundHost ...
- dedecms 模板文件不存在 无法解析文档!问题定位方法!
生成静态的时候,经常会遇到“模板文件不存在,无法解析文 档!”的问题.很多朋友试过论坛里很多方法,都是针对某些人可以解决,某些人的问题依旧,为什么呢?其实问题很可能确实是多种多样的,表现结果却是一样, ...
- 中间件事务码R3AC1里Block Size的含义
在中间件事务码R3AC1可以为一个中间件的适配器对象维护Block size的大小. 以上图的尺寸为50为例,假设在ERP系统里有110个设备(equipment)需要下载,那么CRM中间件会自动生成 ...
- bootstrapTable表格表头换行
使用bootstrapTable组件,达到表头中有一格显示两行,其他表头均为一行,效果图如下: 代码: { field : 'pay_date', title : '已还款完成时间', valign: ...
- Python 变量交换
# coding = utf-8 a, b = 1, 2 print 'before change' print a, b a, b = b, a print 'after change' print ...
- ACM-ICPC (10/16) Codeforces Round #441 (Div. 2, by Moscow Team Olympiad)
A. Trip For Meal Winnie-the-Pooh likes honey very much! That is why he decided to visit his friends. ...
- CF633C Spy Syndrome 2
嘟嘟嘟 题面:把一句话加密:1.所有字母变成小写.2.翻转所有单词.3.去掉空格.然后给你一句加密后的字符串以及一些出现在原句和没有出现在原句的单词,让你还原原句.注意,每一个单词可以使用多次,如果有 ...