asp.net core webpi 结合jwt实现登录鉴权

1.安装jwt nuget包

csharp 复制代码
    <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.25" />
    <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="7.0.3" />

1.1创建jwt配置类

csharp 复制代码
namespace webapi
{
    /// <summary>
    /// 有效载荷配置信息
    /// </summary>
    public class JwtTokenOption
    {
        /// <summary>
        /// Token 过期时间,默认为60分钟
        /// </summary>
        public int TokenExpireTime { get; set; } = 60;

        /// <summary>
        /// 接收人
        /// </summary>
        public string Audience { get; set; }

        /// <summary>
        /// 秘钥(RSA)
        /// </summary>
        public string SecurityKey { get; set; }

        /// <summary>
        /// 签发人
        /// </summary>
        public string Issuer { get; set; }
    }
}

2.配置jwt信息

csharp 复制代码
//注入jwt配置服务
            var jwtOption = builder.Configuration.GetSection("JwtTokenOption");
            builder.Services.Configure<JwtTokenOption>(jwtOption);
            JwtTokenOption jwtTokenOption = jwtOption.Get<JwtTokenOption>();

            //认证
            builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(jwtBearerOptions =>
            {
                jwtBearerOptions.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidAlgorithms = new string[] { "HS256" },//对称加密
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(jwtTokenOption.SecurityKey)),//拿到SecurityKey
                    ValidateIssuer = true,//是否验证Issuer
                    ValidateAudience = true,//是否验证Audience
                    ValidateLifetime = false,//是否验证失效时间
                    ClockSkew = TimeSpan.FromSeconds(30),//时钟脉冲相位差
                    ValidateIssuerSigningKey = true,//是否验证SecurityKey
                    ValidAudience = jwtTokenOption.Audience,//Audience
                    ValidIssuer = jwtTokenOption.Issuer,//Issuer,这两项和前面签发jwt的设置一致
                };
            });;

3.生成token

csharp 复制代码
    [HttpPost("{username}")]
        [AllowAnonymous]
        public IActionResult tokensc()
        {
            // 有效载荷,大家可以自己写,爱写多少写多少;尽量避免敏感信息
            var claims = new[]
            {
            new Claim(ClaimTypes.Name, "pzx"),
            new Claim("NickName","aa"),
            new Claim("Role","Administrator"),//传递其他信息
            };

            // payload 中的信息声明
            var jwtSecurityToken = new JwtSecurityToken(
                claims: claims,
                expires: DateTime.Now.AddMinutes(_jwtTokenOption.TokenExpireTime),
                signingCredentials: new SigningCredentials(new SymmetricSecurityKey(Encoding.ASCII.GetBytes(_jwtTokenOption.SecurityKey)), SecurityAlgorithms.HmacSha256),
                issuer: _jwtTokenOption.Issuer,
                audience: _jwtTokenOption.Audience);
                var tokenString = new JwtSecurityTokenHandler().WriteToken(jwtSecurityToken); ;
                return Ok(tokenString);
        }

4.在需要的控制器或方法上,使用过滤器(只有token解析成功,没有过期才可以访问接口)

csharp 复制代码
[Authorize]
[HttpGet]
public IActionResult Get(){
return ok();
}

5.可以结合IdentityService4身份认证框架使用

相关推荐
terry60013 天前
5G视频短信服务商选型全攻略:通道资源、架构能力与成本评估2026最新标准
大数据·人工智能·5g·json·asp.net·信息与通信·数据库架构
加号314 天前
【C#】VS2022 传统 ASP.NET Web 服务(.asmx)接口实现指南
前端·c#·asp.net
换个昵称都难14 天前
webrtc RTC_P2P源码解析
asp.net·webrtc·p2p
cjp56017 天前
009. ASP.NET WEB API 用户关联esp32设备
前端·后端·asp.net
无风听海17 天前
在 ASP.NET Core 开发环境中为自定义域名签发受信任的自签名证书—HSTS 启用后的完整实践
windows·后端·asp.net
无风听海17 天前
深入理解 ASP.NET Core 中的UseHsts()
后端·asp.net
cjp56018 天前
007. ASP.NET WEB API配置JWT令牌身份认证
后端·asp.net
terry60021 天前
从流畅交互到高可用:企讯通Qcaptcha滑动拼图的毫秒级响应与容灾设计
web安全·json·asp.net·信息与通信·数据库架构
疯狂SQL22 天前
JWT 在线解码、验签、生成一篇讲透:附前端实现、工具架构与在线体验地址
javascript·jwt·编解码·jwt测试
曲幽23 天前
FastAPI 身份验证总踩坑?这份 FastAPI Users “避坑指南”请收好
python·fastapi·web·jwt·oauth2·user·authentication