当前位置: 首页 > news >正文

佛山网站设计网站公司/关键词快速上首页排名

佛山网站设计网站公司,关键词快速上首页排名,知识付费网站建设,黑马网站建设前言 上一节我们讲述的书如何使用jwt token,而且上一节的token是要加Authorization:bearer XXXXXXXXXXXX才能访问。 这一节我们来研究如何自定义类似jwt的token验证,也就是说直接从header中拿取我们想要的token 自己定制JWT 首先,继续在上一节…

前言

上一节我们讲述的书如何使用jwt token,而且上一节的token是要加Authorization:bearer XXXXXXXXXXXX才能访问。

这一节我们来研究如何自定义类似jwt的token验证,也就是说直接从header中拿取我们想要的token

自己定制JWT

首先,继续在上一节的JwtAuthSample项目中的Startup.cs中的ConfigureServices方法中注释掉以下内容,然后自定义jwt token

复制代码
        public void ConfigureServices(IServiceCollection services){//将appsettings.json中的JwtSettings部分文件读取到JwtSettings中,这是给其他地方用的services.Configure<JwtSettings>(Configuration.GetSection("JwtSettings"));//由于初始化的时候我们就需要用,所以使用Bind的方式读取配置//将配置绑定到JwtSettings实例中var jwtSettings=new JwtSettings();Configuration.Bind("JwtSettings",jwtSettings);services.AddAuthentication(options=>{//认证middleware配置options.DefaultAuthenticateScheme=JwtBearerDefaults.AuthenticationScheme;options.DefaultChallengeScheme=JwtBearerDefaults.AuthenticationScheme;}).AddJwtBearer(o=>{// //主要是jwt  token参数设置// o.TokenValidationParameters=new Microsoft.IdentityModel.Tokens.TokenValidationParameters{//     ValidIssuer =jwtSettings.Issuer,//     ValidAudience =jwtSettings.Audience,//     //这里的key要进行加密,需要引用Microsoft.IdentityModel.Tokens//     IssuerSigningKey=new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSettings.SecretKey))// };o.SecurityTokenValidators.Clear();//将SecurityTokenValidators清除掉,否则它会在里面拿验证o.Events=new JwtBearerEvents{//重写OnMessageReceivedOnMessageReceived=context=>{var token=context.Request.Headers["mytoken"];context.Token=token.FirstOrDefault();return Task.CompletedTask;}};});services.AddMvc();}
复制代码

接下来我们新建MyTokenValidator.cs类来验证token,并让这个类实现ISecurityTokenValidator接口

复制代码
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using System.Security.Claims;
using Microsoft.IdentityModel.Tokens;namespace JwtAuthSample
{public class MyTokenValidator : ISecurityTokenValidator{bool ISecurityTokenValidator.CanValidateToken =>true;int ISecurityTokenValidator.MaximumTokenSizeInBytes { get; set; }bool ISecurityTokenValidator.CanReadToken(string securityToken){return true;}//验证tokenClaimsPrincipal ISecurityTokenValidator.ValidateToken(string securityToken, TokenValidationParameters validationParameters, out SecurityToken validatedToken){validatedToken=null;//判断token是否正确if(securityToken!="abcdefg")return null;//给Identity赋值var identity=new ClaimsIdentity(JwtBearerDefaults.AuthenticationScheme);identity.AddClaim(new Claim("name","wyt"));identity.AddClaim(new Claim(ClaimsIdentity.DefaultRoleClaimType,"admin"));var principle=new ClaimsPrincipal(identity);return principle;}}}
复制代码

 

然后我们在Startup.cs的ConfigureServices方法中将我们自定义的MyTokenValidator验证加进去

o.SecurityTokenValidators.Add(new MyTokenValidator());

这时候我们执行dotnet watch run运行项目,用postman不加header头或加错误的hearder头,发现无法访问

 

我们用正确的自定义token进行访问

Role以及Claims授权

Role授权

我们之前的授权方式都是添加  [Authorize]  标签但是由于我们在Claim中设置了Role

所以我们可以将  [Authorize]  标签写成[Authorize(Roles="admin")]

只有解析出来的token中的角色为admin才授权成功

 

 

 Claims授权

 要使用Claims授权,我们首先需要在Startup.cs的ConfigureServices方法中添加授权

            //添加Claim授权services.AddAuthorization(options=>{options.AddPolicy("SuperAdminOnly",policy=>{policy.RequireClaim("SuperAdminOnly");});});

然后在AuthorizeController.cs生成token的action中的Claim中添加SuperAdminOnly

最后在需要权限认证的地方使用标签    [Authorize(Policy="SuperAdminOnly")]

我们首先获取一下token,到jwt官网上解析一下发现token中包含SuperAdminOnly

然后访问成功

转载于:https://www.cnblogs.com/Agui520/p/8400163.html

http://www.jmfq.cn/news/4938949.html

相关文章:

  • 地产项目网站/网络设计
  • 做网站赚钱但又不想开公司/免费代理浏览网页
  • 张家港做网站排名/网站托管
  • 做外贸仿牌都用哪些网站/微信指数官网
  • 产品网站建设公司哪家好/做销售找客户渠道
  • 网站怎么做一盘优化排名/seo网站推广的主要目的包括
  • 网站应用市场设计/软文推广文章案例
  • 建设独立网站的公司吗/推广赚钱的软件排行
  • 肃宁网站建设公司/佛山seo关键词排名
  • 哪个网站可以做公务员真题/软文发布
  • 美国互联网公司100排名/seo工具在线访问
  • 建设微信商城网站/torrentkitty磁力搜索引擎
  • php网站开发如何实现删除功能/推广专员
  • 企业网站必须做可信认证吗/友情链接名词解释
  • 物流百度推广怎么做网站/百度推广管理系统
  • 重庆智能网站建设价格/seo概念的理解
  • 视频网站直播如何做/杭州网站优化方案
  • 信息化建设 网站建设等方面/沧州搜索引擎优化
  • 西安网站开发公司哪家好/百度一下官网首页
  • 网站上做值机的app/求网址
  • 南宁网络推广软件/广东网站seo营销
  • 纳雍网站建设公司/东莞免费网站建设网络营销
  • 湖南企业网站制作/如何建一个自己的网站
  • 重庆网站推广软件/友情链接源码
  • 网站建设 推荐/网站新域名查询
  • 丰都网站建设案例/网站seo技术能不能赚钱
  • 做壁纸网站好/网页制作教程书籍
  • 网页小游戏的网站/深圳网络推广哪家
  • 北京网站建设 优化/营销顾问公司
  • 网站开发用什么软件有哪些/广州百度网站排名优化