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身份认证框架使用

相关推荐
terry6001 天前
从流畅交互到高可用:企讯通Qcaptcha滑动拼图的毫秒级响应与容灾设计
web安全·json·asp.net·信息与通信·数据库架构
疯狂SQL2 天前
JWT 在线解码、验签、生成一篇讲透:附前端实现、工具架构与在线体验地址
javascript·jwt·编解码·jwt测试
曲幽3 天前
FastAPI 身份验证总踩坑?这份 FastAPI Users “避坑指南”请收好
python·fastapi·web·jwt·oauth2·user·authentication
好家伙VCC3 天前
区块链双向支付通道实战:从签名到结算
java·后端·区块链·asp.net
西凉的悲伤3 天前
Spring Security + JWT 登录认证完整实践指南
java·后端·spring·spring security·jwt
忧郁的蛋~4 天前
ASP.NET Core Web API 完全指南:请求管道、认证、错误处理到生产部署
前端·后端·asp.net·.net
无风听海5 天前
深入解析 ASP.NET Core 中的 Request.Cookies:从 HTTP 协议到加密存储与执行时序
后端·http·asp.net
步步为营DotNet5 天前
探索.NET 11:Blazor 在跨平台客户端应用开发的进阶实践
前端·asp.net·.net
无风听海5 天前
ASP.NET Core 中的重定向(Redirect)深度解析
后端·asp.net
刚子编程6 天前
.NET 8 Web开发入门(七):安全门禁——JWT 身份验证与授权实战
jwt·授权·接口安全·.net 8·身份验证·json web token·bearer token