在Asp.Net Core Web API中使用JWT鉴权(2)使用JWT鉴权
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了 在Asp.Net Core Web API中使用JWT鉴权(2)使用JWT鉴权,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2806字,纯文字阅读大概需要5分钟。
内容图文
![在Asp.Net Core Web API中使用JWT鉴权(2)使用JWT鉴权](/upload/InfoBanner/zyjiaocheng/603/38d5f8209e9448ffbee26e9010d21717.jpg)
本文承接上一篇在Asp.Net Core Web API中使用JWT鉴权(1)创建鉴权中心。
1、创建Asp.Net Core Web API项目
这里使用的环境是VS2019 + .Net Core 3.1。
2、在Startup中注册JWT鉴权
(1) 使用Nuget安装Microsoft.AspNetCore.Authentication.JwtBearer。
(2) 注册JWT鉴权
#region 注册JWT鉴权 var issuer = Configuration["issuer"]; var audience = Configuration["audience"]; var securityKey = Configuration["SecurityKey"]; services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) //默认授权机制名称 .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, //是否验证Issuer ValidateAudience = true, //是否验证Audience ValidateLifetime = true, //是否验证失效时间 ValidateIssuerSigningKey = true, //是否验证IssuerSigningKey ValidAudience = audience, ValidIssuer = issuer, IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(securityKey)), //自定义校验规则:新登录后,之前的token无效 //AudienceValidator = (audiences, securityToken, validationParameters) => //{ // return audiences != null && audiences.FirstOrDefault().Equals(audience); //} }; }); #endregion
(3) 启用鉴权中间件
//启用鉴权中间件 app.UseAuthentication();
3、添加JWT配置信息(appsettings.json)
"issuer": "http://localhost:9527", "audience": "http://localhost:9527", "SecurityKey": "4A9A70D2-B8AD-42E1-B002-553BDEF4E76F"
注意issuer、audience、SecurityKey要和鉴权中心的配置保持一致。
4、在控制器的接口中使用[Authorize]属性
using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using System; using System.Linq; using System.Security.Claims; namespace TestWebApi.Controllers { [Route("api/[controller]")] [ApiController] public class TestController : ControllerBase { [HttpGet] [Route("GetAuthData")] [Authorize] public IActionResult GetAuthData() { var claims = HttpContext.AuthenticateAsync().Result.Principal.Claims; var name = claims.FirstOrDefault(t => t.Type.Equals(ClaimTypes.Name))?.Value; var exp = claims.FirstOrDefault(t => t.Type.Equals("exp"))?.Value; var expDateTime = DateTime.Now; if (!string.IsNullOrWhiteSpace(exp)) { long expValue; if (long.TryParse(exp, out expValue)) { expDateTime = TimeZoneInfo.ConvertTime(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc), TimeZoneInfo.Local); expDateTime = expDateTime.AddSeconds(expValue); } } Console.WriteLine($"name: {name}, expDateTime: {expDateTime}"); return new JsonResult(new { ExpDateTime = expDateTime, Name = name, Data = "已授权", Type = "GetAuthorizeData" }); } } }
5、运行
(1) 运行Web API项目,在Postman中输入http://localhost:5000/api/Test/GetAuthData,正常情况下会有401 Unauthorized错误。
(2) 在Postman的Authorization选项卡中选择"Bearer Token",并输入鉴权中心登录后的token,正常情况下会输出类似下面的内容:
{ "expDateTime": "2021-02-22T10:02:25+08:00", "name": "admin", "data": "已授权", "type": "GetAuthorizeData" }
内容总结
以上是互联网集市为您收集整理的 在Asp.Net Core Web API中使用JWT鉴权(2)使用JWT鉴权全部内容,希望文章能够帮你解决 在Asp.Net Core Web API中使用JWT鉴权(2)使用JWT鉴权所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。