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

学习ASP.NET Core的身份认证(基于JwtBearer的身份认证1)

  本文开始学习基于JWT的身份认证基本用法,相比Cookie、Session等方式,JWT要复杂一些,除了注册认证服务之外,还需提供JWT Token的生成函数或生成类,以便在访问需授权的函数之前获取Token。参考文献1-7中大部分示例都是基于WebApi项目,本文基于Microsoft.AspNetCore. Authentication. JwtBearer包,参照参考文献中的代码,实现最简单的JWT身份认证,由于还不清楚客户端如何保存并传递JWT Token到服务端,暂时使用postman访问WebApi,先不管参数设置是否正确或合适,能调通就可以,后续再逐步学习各种参数的意义及用法。
  新建WebApi项目,在Nuget包管理器中搜索并安装Microsoft.AspNetCore. Authentication. JwtBearer包。
在这里插入图片描述  在appsettings.json中增加JWT设置(这步是抄的参考文献4中的设置),主要是密钥及过期时间(不过测试时发现过期时间没有生效,暂时不清楚是什么地方设置的问题),简单点其实可以直接写死到代码里面,不过既然是照搬,就搬的到位一些。

"JWT": { 
  "Key": "asfasfdflj134aanjkdsjiio1232sdasdfdfkandsf12",
  "expres": "3",
  "Issuer": "gc_2299",
  "Audience": "gc_2299" 
}

  创建JWT Token的函数也是抄的参考文献4,不过没有单独创建类,而是将其放在了WebApi的控制器类中,设置了允许匿名访问,代码就不贴了,主要是调用JwtSecurityTokenHandler类使用密钥针对claims实例生成Token。
  接着是在program.cs文件中添加JwtBear认证服务,这里是抄的参考文献5中的代码,最初测试时使用的是参考文献4的代码,但是测试时始终认证不通过,搞不清楚怎么回事(最后发现是把UseAuthentication和UseAuthorization的顺序搞反了),就换成了参考文献5中的代码,同时将TokenValidationParameters的部分验证参数值调整成了false,最终使用postman调用WebApi函数成功。

builder.Services.AddAuthentication(options =>
{
    options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(options =>
{
    options.TokenValidationParameters = new TokenValidationParameters
    {
        ValidateAudience = false,
        ValidateLifetime = true,
        ValidateIssuer = false,
        ValidateIssuerSigningKey = true,        
        IssuerSigningKey = new SymmetricSecurityKey(
            Encoding.UTF8.GetBytes(JwtOtp.Key)
        )
    };
});

  然后就是将需要访问控制的函数或类标识Authorize特性,本文测试时设置GetInfo函数需要访问控制。
  打开postman,输入GetInfo地址,直接访问的话会报401未授权错误,如下图所示:

在这里插入图片描述

  在postman中输入获取Token的地址,获取token,如下图所示:
在这里插入图片描述

  照下图所示,将Token放在Headers中,key为Authorization,值的话是Bearer+空格+Token,然后再调用GetInfo函数即可正常返回数据。
在这里插入图片描述
  上述测试内容虽然最终结果是能调用成功,但还不清楚其中有多少使用错误或设置错误的地方,后续还会继续学习并测试Jwt身份认证的相关内容。

参考文献:
[1]https://www.jianshu.com/p/a2804e72d296
[2]https://blog.csdn.net/sD7O95O/article/details/85043160
[3]https://www.cnblogs.com/qiongkangle/p/13347283.html
[4]https://www.cnblogs.com/xbhp/p/17401507.html
[5]https://www.cnblogs.com/superstar/p/16491428.html
[6]https://blog.csdn.net/weixin_44877917/article/details/140609294
[7]https://blog.csdn.net/qq_40287041/article/details/143368882
[8]https://blog.csdn.net/Tdh5258/article/details/119064695


http://www.kler.cn/a/450409.html

相关文章:

  • 贪心算法(三)
  • 系统压力测试助手——stress-ng
  • 概率论 期末 笔记
  • 如何在centos系统上挂载U盘
  • 【编辑器扩展】打开持久化路径/缓存路径/DataPath/StreamingAssetsPath文件夹
  • 由于这些关键原因,我总是手边有一台虚拟机
  • 【论文阅读】Unlearning Backdoor Attacks in Federated Learning
  • TowardsDataScience 博客中文翻译 2018~2024(一百二十三)
  • Java 深拷贝全面解析
  • Ansible---playbook剧本
  • 案例分析-THC7984设计问题报告
  • 【超详细实操内容】django的身份验证系统之限制用户访问的三种方式
  • Flutter动画学习二
  • 18. 分积木
  • C#—内建接口: IEnumerable与IEnumerator接口详解
  • 如何高效运营OZON:从基础搭建到运营策略
  • 【聊天室后端服务器开发】 入口网关开发
  • Hadoop组成概述
  • 循环和迭代
  • 合同尾款产生纠纷该如何处理
  • 京东科技基于 Apache SeaTunnel 复杂场景适配 #数据集成
  • 深度分析 es multi_match 中most_fields、best_fields、cross_fields区别
  • 用于管理Unity中UGUI的工具系统UISystem
  • Bootstrap 5 加载效果
  • python学opencv读取图像(十四)BGR图像和HSV图像通道拆分
  • Vision Pro开发实现系统UI风格 毛玻璃效果