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

devtools/2024/12/24 22:46:58/

  本文开始学习基于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.ppmy.cn/devtools/144061.html

相关文章

Guava 库中的 `Multiset` 是一个允许元素重复的集合

Guava 库中的 Multiset 是一个允许元素重复的集合。它继承自 Collection 接口,提供了额外的方法来处理元素的计数。以下是一些使用 Guava Multiset 的基本代码示例: 引入 Guava 库 首先,确保你的项目中已经添加了 Guava 库的依赖。如果你使…

基于字节大模型的论文翻译(含免费源码)

基于字节大模型的论文翻译 源代码: 👏 star ✨ https://github.com/boots-coder/LLM-application 展示 项目简介 本项目是一个基于大语言模型(Large Language Model, LLM)的论文阅读与翻译辅助工具。它通过用户界面&#xff08…

基于Spring Boot的高校素拓分管理系统

一、系统背景与目的 随着高校教育的不断发展,素质拓展活动在大学生培养中扮演着越来越重要的角色。为了更好地管理和记录学生的素质拓展学分,提高管理效率,降低管理成本,开发一套基于Spring Boot的高校素拓分管理系统显得尤为重要…

CSSmodule的作用是什么

CSS Modules的作用主要体现在以下几个方面: 1. 解决全局样式污染问题 在传统的CSS管理方式中,样式定义通常是全局的,这很容易导致全局样式污染。当多个组件或页面共享同一个样式时,可能会出现样式冲突和覆盖的情况,从…

Unity录屏插件-使用Recorder录制视频

目录 1.Recorder的下载 2.Recorder面板 2.1常规录制属性 2.2录制器配置 2.2.1添加录制器 2.2.2配置Input属性 2.2.3配置 Output Format 属性 2.2.4配置 Output File 属性 3.Recorder的使用 3.1录制Game View视频 3.1.1Recorder配置与场景搭建 3.1.2开始录制 3.1.3…

Python练习之列表的使用

(搭配主页知识点) 【练习要求】 针对知识点列表定义、追加、列表元素读取、查找安排的本实例。要求实现:有一个列表,内容是:[21,25,21,23,22,20],记录的是一批学生的年龄请通过列表的功能(方法),对其进行…

nginx 反向代理配置详解

在 Nginx 中,反向代理的配置通常写在 Nginx 配置文件的 server 块中。具体步骤如下: 1. 找到 Nginx 配置文件 通常,Nginx 的主配置文件位于以下路径之一: /etc/nginx/nginx.conf/etc/nginx/sites-available/default(在一些基于 Debian 的系统上,如 Ubuntu)/etc/nginx/…

day-21 内核链表以及栈

1.昨日作业 1.删除指定节点 找到删除就完事了,双向可以停在删除处。 /***************************** 功能:删除指定结点(通过姓名)* 参数:phead;oldname; * 返回:成功0,失-1&…