欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > ASP.Net Core中JWT基本使用

ASP.Net Core中JWT基本使用

2025/4/18 22:58:20 来源:https://blog.csdn.net/m0_72613306/article/details/147285051  浏览:    关键词:ASP.Net Core中JWT基本使用

JWT

授权

1.配置文件添加属性

image-20250415223246524

 "Jwt": {"SecretKey": "SDMC-CJAS1-SAD-DFSFA-SADHJVF-VFAAAAAAA","Issuer": "http://localhost:5200","Audience": "http://localhost:5200"}

2.Program.cs中注册授权

 app.UseAuthentication(); // 必须在 UseAuthorization 之前app.UseAuthorization();

3.开始授权

 using Microsoft.AspNetCore.Mvc;using Microsoft.IdentityModel.Tokens;using System.IdentityModel.Tokens.Jwt;using System.Security.Claims;using System.Text;​public class TestController : ControllerBase{// 注入 IConfiguration 服务,用于读取配置文件中的设置private readonly IConfiguration _configuration;​// 构造函数,接收 IConfiguration 参数public TestController(IConfiguration configuration){_configuration = configuration;}​// 定义一个 HTTP GET 方法,返回一个 JWT 令牌[HttpGet]public string Get(){// 创建声明数组,包含用户的相关信息// 这里添加了用户 ID 和用户名的声明var claims = new Claim[]{new Claim("Id", "1"), // 用户 IDnew Claim("UserName", "123") // 用户名// 注意:不要在声明中存储敏感信息};​// 从配置文件中读取 JWT 设置var jwtSettings = _configuration.GetSection("Jwt");​// 创建对称加密密钥,用于签名 JWT 令牌var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSettings["SecretKey"]));​// 创建 JWT 令牌var token = new JwtSecurityToken(issuer: jwtSettings["Issuer"], // 令牌的颁发者audience: jwtSettings["Audience"], // 令牌的受众claims: claims, // 令牌中的声明notBefore: DateTime.Now, // 令牌生效时间expires: DateTime.Now.AddHours(1), // 令牌过期时间(1 小时后)signingCredentials: new SigningCredentials(key, // 签名密钥SecurityAlgorithms.HmacSha256 // 签名算法));​// 使用 JwtSecurityTokenHandler 将令牌转换为字符串格式var jwtToken = new JwtSecurityTokenHandler().WriteToken(token);​// 返回生成的 JWT 令牌return jwtToken;}}

鉴权

1.注册鉴权

program.cs

 // 从配置文件中获取 JWT 设置var jwtSettings = builder.Configuration.GetSection("Jwt");​// 配置 JWT 身份验证builder.Services.AddAuthentication(options =>{options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;}).AddJwtBearer(options =>{options.TokenValidationParameters = new TokenValidationParameters{ValidateIssuer = true,ValidateAudience = true,ValidateLifetime = true,ValidateIssuerSigningKey = true,ValidIssuer = jwtSettings["Issuer"],ValidAudience = jwtSettings["Audience"],IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSettings["SecretKey"]))};});

2.给要鉴权的类和方法上面加上[Authorize]

 [HttpGet]public string NoAuthorize(){return "this is NoAuthorize";}​[Authorize][HttpGet]public string Authorize(){return "this is Authorize";}

鉴权了的方法会报401

image-20250415224232595

swagger配置密钥

 c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme{In=ParameterLocation.Header,Type=SecuritySchemeType.ApiKey,Description= "直接在下框中输入Bearer {token}(注意两者之间是一个空格)",Name="Authorization",BearerFormat="JWT",Scheme="Bearer"});c.AddSecurityRequirement(new OpenApiSecurityRequirement{{new OpenApiSecurityScheme{Reference=new OpenApiReference{Type=ReferenceType.SecurityScheme,Id="Bearer"}},new string[] {}}});

密钥格式(不能省略空格)

 Bearer xxxxxxxxxxxxxxx

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词