.net core 生成jwt+swagger-通过 IHttpContextAccessor读取token信息

1.安装jwt相关包

 <ItemGroup><PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.25" /><PackageReference Include="Microsoft.IdentityModel.Tokens" Version="7.0.3" /><PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" /><PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="7.0.3" /></ItemGroup>

2.appsetting.json配置jwt的验证信息

 "JwtSetting": {"Issuer": "pzx", //颁发者"Audience": "everyone", //受众"SecurityKey": "appapap122344kkappapap122344kkappapap122344kkappapap122344kkappapap122344kkappapap122344kkappapap122344kkappapap122344kk", //密钥//token//和我配置一样可以拿我生成的token测试 "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoiSm9obiBEb2UiLCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9lbWFpbGFkZHJlc3MiOiJqb2huZG9lQGV4YW1wbGUuY29tIiwiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93cy8yMDA4LzA2L2lkZW50aXR5L2NsYWltcy9yb2xlIjoiQWRtaW4iLCJleHAiOjE3MDMyNzMwODYsImlzcyI6InB6eCIsImF1ZCI6ImV2ZXJ5b25lIn0.ePY0ZkDQGF1GJWKqiCQjUn2y7aSNG1WesfBH5xPy1Fg"}

3.校验token的合法性(在progam文件)

  #region JWT 认证builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)//.AddCustomAuth(o => { }).AddJwtBearer(options =>{options.TokenValidationParameters = new TokenValidationParameters{ValidIssuer = builder.Configuration["JwtSetting:Issuer"],ValidAudience = builder.Configuration["JwtSetting:Audience"],IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["JwtSetting:SecurityKey"]))// 默认允许 300s  的时间偏移量,设置为0//ClockSkew = TimeSpan.Zero,ValidateLifetime = true};});#endregion JWT 认证

4.在swaggerUI中配置Bearer认证(在progam文件)

 builder.Services.AddSwaggerGen(c =>{c.SwaggerDoc("v1", new OpenApiInfo { Title = "Your API", Version = "v1" });// 添加Bearer认证支持c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme{Description = "JWT Authorization header using the Bearer scheme",Name = "Authorization",In = ParameterLocation.Header,Type = SecuritySchemeType.ApiKey,Scheme = "Bearer"});c.AddSecurityRequirement(new OpenApiSecurityRequirement{{new OpenApiSecurityScheme{Reference = new OpenApiReference{Type = ReferenceType.SecurityScheme,Id = "Bearer"}},new List<string>()}});});

5.配置SwaggerUI(在progam文件)

                app.UseSwaggerUI(c =>{c.SwaggerEndpoint("/swagger/v1/swagger.json", "Your API V1");//加载api中文注释,true是加载控制器上的注释(须在项目属性-生成勾选生成api文档)c.IncludeXmlComments(AppContext.BaseDirectory + Assembly.GetExecutingAssembly().GetName().Name + ".xml", true);// 在Swagger UI中添加Bearer认证输入框c.DisplayRequestDuration();//启动过滤c.EnableFilter();c.EnableDeepLinking();c.EnableValidator();c.SupportedSubmitMethods(SubmitMethod.Get, SubmitMethod.Post, SubmitMethod.Put, SubmitMethod.Patch, SubmitMethod.Delete);});

6.添加授权服务 (注意两者的先后顺序)

app.UseAuthentication();
app.UseAuthorization();

7.生成token信息

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.IdentityModel.Tokens;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;namespace webapi.Controllers
{[ApiController][Route("[controller]/[action]")]public class WeatherForecastController1 : ControllerBase{private readonly ILogger<WeatherForecastController1> _logger;private readonly IHttpContextAccessor _httpContextAccessor;public IConfiguration _configuration { get; }public WeatherForecastController1(ILogger<WeatherForecastController1> logger, IConfiguration configuration, IHttpContextAccessor httpContextAccessor){_logger = logger;_configuration = configuration;_httpContextAccessor = httpContextAccessor;}[HttpGet]public int[] Get(){return new int[] { 1, 2, 3 };}/// <summary>/// 生成token/// </summary>/// <returns></returns>[HttpGet]public string GenerateToken(){string issuer = _configuration["JwtSetting:Issuer"];string audience = _configuration["JwtSetting:Audience"];var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["JwtSetting:SecurityKey"]));//使用对称加密算法加密var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);//负载信息var claims = new[]{new Claim(ClaimTypes.Name, "John Doe"),new Claim(ClaimTypes.Email, "johndoe@example.com"),new Claim(ClaimTypes.Role, "Admin"),// 可以添加其他常用的claims,如ClaimTypes.Sid,ClaimTypes.GivenName等};var token = new JwtSecurityToken(issuer: issuer,audience: audience,claims: claims,expires: DateTime.Now.AddHours(1),signingCredentials: credentials);var tokenHandler = new JwtSecurityTokenHandler();return tokenHandler.WriteToken(token);}/// <summary>///获取token信息/// </summary>/// <returns></returns>[Authorize][HttpGet]public IActionResult GetUserInfo(){var user = _httpContextAccessor.HttpContext.User;// 获取用户的名称声明var userName = user.Identity.Name;// 获取用户的所有声明var userClaims = user.Claims;// 遍历所有声明并输出foreach (var claim in userClaims){Console.WriteLine($"Claim Type: {claim.Type}, Claim Value: {claim.Value}");}return Ok("User information retrieved successfully");}}
}

8.注入 builder.Services.AddHttpContextAccessor();

 builder.Services.AddHttpContextAccessor();

9.演示
执行如图方法生成token
在这里插入图片描述
10.复制token 填入Authorize输入框格式 Bearer+空格+token

在这里插入图片描述
11.访问方法,获取token里存的claim信息
在这里插入图片描述
为啥httpcontext能读取到token的信息呢?
在一个.NET Core应用程序中,通常使用身份验证和授权来验证用户并控制他们对资源的访问。当用户进行身份验证后,他们通常会收到一个包含有关其身份的信息的令牌(token),例如访问令牌(access token)或身份令牌(identity token)。

这些令牌一般包含在HTTP请求的标头(header)中,例如Authorization标头。在.NET Core应用程序中,HttpContext中的User属性会包含与已验证用户相关的信息,而这些信息通常也包括从令牌中提取的声明(claims)。
end…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/491427.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NATURE 人工智能 | 神奇的粒子机器人

没想到吧&#xff0c;像细胞一样自由组合灵活多变的机器人正在从科幻电影中走出来。就像在伤口愈合是活细胞聚集并集体迁移的过程。在生物系统中&#xff0c;群体的大规模集体迁移是通过组件的耦合和协调来实现的&#xff0c;在伤口愈合的过程中&#xff0c;活细胞聚集并集体迁…

表单校验---struts2

一 写validate方伐 1 让你的Action继承ActionSupport类&#xff0c; 重写validate方法&#xff0c;&#xff08;或validateXxxx&#xff09; 判断&#xff0c;写入错误信息 jsp中用标签显示&#xff0c;struts。xml中配置转向的页面 package he.action;import java.util.Map;…

城市大脑与智慧城市前沿趋势

近年来&#xff0c;智慧城市建设出现新的动向&#xff0c;包括城市大脑、城市云脑、城市超级大脑、城市超脑、城市神经网络等“泛城市大脑”概念也大量涌现。杭州、上海、北京、广州等城市各自提出和开展了不同城市大脑建设方案&#xff0c;其中上海市开展了以建设城市神经元系…

在iOS 8中使用UIAlertController

iOS 8的新特性之一就是让接口更有适应性、更灵活&#xff0c;因此许多视图控制器的实现方式发生了巨大的变化。全新的UIPresentationController在实现视图控制器间的过渡动画效果和自适应设备尺寸变化效果&#xff08;比如说旋转&#xff09;中发挥了重要的作用&#xff0c;它有…

MapReduce分析NCDC 年气象数据最低温度与最高温度

利用hadoop计算技术对采集的气象数据信息进行处理&#xff0c;主要分两个阶段&#xff1a;mapper阶段和reducer阶段&#xff0c;mapper阶段主要是对日志文件进行按行读取并进行字符串截取&#xff0c;reducer阶段对mapper阶段传过来的数据进行大小比较&#xff0c;最终获取每一…

非侵入脑机接口新突破!用意念控制光标,连续追踪效果提升5倍

来源&#xff1a;智东西看点&#xff1a;CMU研究人员在使用非侵入式脑机接口开发了第一个成功用意念控制的机械臂&#xff0c;展现了连续追踪和跟踪计算机光标的能力。智东西6月23日消息&#xff0c;卡内基梅隆大学与明尼苏达大学的研究人员在非侵入式机器人设备控制领域取得了…

AI芯片的长征之路:挑战与机遇

来源&#xff1a; 半导体行业观察前言&#xff1a;笔者有幸受邀在六月初北京举行的首届亚洲AI硬件峰会&#xff08;AI Hardware Summit Asia&#xff09;上发表了开幕主题演讲&#xff0c;与全世界的AI硬件专家分享了我对行业的一些看法和想法。演讲以英文形式进行&#xff0c;…

make_moons函数

生成半环形数据 sklearn.datasets.make_moons(n_samples100, shuffleTrue, noiseNone, random_stateNone) 参数&#xff1a; n_samples : 整数型, 可选&#xff0c;默认为100&#xff0c;产生的样本点的数量shuffle : 布尔型&#xff0c;可选填 (默认为True)&#xff0c;是否…

阿里巴巴罗汉堂发布最关乎人类未来的十大问题

来源&#xff1a;中国新闻网中新网杭州6月25日电 (记者 魏晞)25日&#xff0c;阿里巴巴倡议成立的罗汉堂发布最关乎人类未来的十大问题。200多位来自全球的顶尖学者、政界、企业界负责人应邀在杭州“西湖论剑”&#xff0c;闭门研讨十大问题&#xff0c;其中包括6位诺贝尔经济学…

Drive.ai轰然倒下:曾估值两亿,吴恩达夫妇站台,苹果将接盘部分可用技术人才...

来源&#xff1a;大数据文摘曾经估值两个亿美元&#xff0c;吴恩达夫妇亲自站台&#xff0c;风极一时的无人车创业公司Drive.ai轰然倒塌。本月20日&#xff0c;总部位于加州山景城的 Drive.ai 公司被证实已经向一家州政府机构递交了通知&#xff0c;表明即将关闭&#xff0c;并…

PyMC3实现贝叶斯神经网络

转自https://blog.csdn.net/jackxu8/article/details/71308390#commentBox 源地址https://docs.pymc.io/notebooks/bayesian_neural_network_advi.html PyMC3中的贝叶斯深网络 生成数据 产生一个简单的线性不可分的二分类问题的模拟数据。 %matplotlib inline import pymc…

Dynamics CRM 开启图表的3D效果展示

CRM中的图表在我们的业务场景中用的很多&#xff0c;用户可以根据自己的实际需求来构建图表查看数据。我们平时看到的图表都是平面的&#xff0c;像下图中的这种&#xff0c;那有没有一种方式可以让展示3D效果看起来更立体呢&#xff0c;答案是可以的。 这里就以上面的图表为例…

“CRISPR婴儿”计划疯狂重启 顶级科学家们表示无力阻止

来源&#xff1a; 生物通新的“CRISPR婴儿”计划启动&#xff0c;顶级科学人士感到震惊&#xff0c;却表示他们无力阻止它6月10日&#xff0c;俄罗斯分子生物学家Denis Rebrikov表示计划开展基因编辑婴儿实验&#xff0c;并公开了他将跨越“红线”的研究计划。两位有影响力的学…

PyMC3和Lasagne构建神经网络(ANN)和卷积神经网络(CNN)

转自http://www.sohu.com/a/162460147_505915 源地址https://twiecki.io/blog/2016/07/05/bayesian-deep-learning/ 今天&#xff0c;我们将使用Lasagne构建一个更有趣的模型&#xff0c;这是一个灵活的Theano图书馆&#xff0c;用于构建各种类型的神经网络。你可能知道&…

OpenCV高斯滤波GaussianBlur

图像处理中&#xff0c;常用的滤波算法有均值滤波、中值滤波以及高斯滤波等。 三种滤波器的对比滤波器种类基本原理特点均值滤波使用模板内所有像素的平均值代替模板中心像素灰度值易收到噪声的干扰&#xff0c;不能完全消除噪声&#xff0c;只能相对减弱噪声中值滤波计算模板内…

(附视频) | AI奠基人、美国AI科学家特伦斯谈深度学习​

来源&#xff1a;笑看国际风云特伦斯 谢诺夫斯基&#xff08;Terrence Sejnowski&#xff09;&#xff1a;世界十大人工智能科学家之一&#xff0c;还是美国仅3位在世的‘四院院士’之一&#xff0c;同时兼任全球人工智能顶级会议NIPS基金会主席。1989年&#xff0c;特伦斯加入…

OpenCV图像金字塔

图像金字塔是图像多尺度表达的一种&#xff0c;是一种以多分辨率来解释图像的有效但概念简单的结构。一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低&#xff0c;且来源于同一张原始图的图像集合。其通过梯次向下采样获得&#xff0c;直到达到某个终止条件才停止采…

带你深入理解图灵机--天才所在的时代

来源&#xff1a;人机与认知实验室这几年由于区块链的大热&#xff0c;以太坊独特的solidity语言实现智能合约功能&#xff0c;图灵完备这个词走进大家的视线。没有计算机专业知识的同学其实很难理解这个词的意思&#xff0c;其实计算机专业的同学都没有深入理解图灵机&#xf…

用PyMC3进行贝叶斯统计分析(代码+实例)

问题类型1&#xff1a;参数估计 真实值是否等于X&#xff1f; 给出数据&#xff0c;对于参数&#xff0c;可能的值的概率分布是多少&#xff1f; 例子1&#xff1a;抛硬币问题 硬币扔了n次&#xff0c;正面朝上是h次。 参数问题 想知道 p 的可能性。给定 n 扔的次数和 h …

华为: 即将发布5G+VR的颠覆式智能眼镜

来源&#xff1a;VR每日必看6月27日MWC19上海期间&#xff0c;华为手机业务总裁何刚在全球终端峰会发表演讲&#xff0c;提及华为终端在5G时代的全场景战略是“18N”。“1”就是华为手机&#xff0c;“8”则囊括了TV、平板、PC、耳机、车机、手表、眼镜、音响八项终端产品&…