全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C#如何实现JWT(JSON Web Token)认证?ASP.NET Core Web API安全入门

JWT是一种无状态的开放标准,用于安全传输用户信息,由Header、Payload、Signature三部分组成;在ASP.NET Core中,通过添加JwtBearer认证服务、配置TokenValidationParameters参数,并在登录接口生成令牌,实现API安全验证;使用[Authorize]特性保护接口,客户端在请求头携带Bearer Token进行身份验证。

在ASP.NET Core Web API中实现JWT认证是保障接口安全的常见方式。它通过生成一个包含用户信息的加密令牌,让客户端在后续请求中携带该令牌进行身份验证,避免每次请求都登录。

什么是JWT?

JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在各方之间以JSON格式安全地传输信息。一个JWT字符串通常由三部分组成:头部(Header)、载荷(Payload)和签名(Signature),格式为 xxx.yyy.zzz

例如:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

JWT的优势在于无状态,服务端不需要存储会话信息,适合分布式系统和前后端分离架构。

配置JWT认证服务

Program.cs 中添加JWT认证配置:

安装NuGet包(若未安装):

Microsoft.AspNetCore.Authentication.JwtBearer

Program.cs 中配置服务:

var builder = WebApplication.CreateBuilder(args);

// 添加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 = builder.Configuration["Jwt:Issuer"],
        ValidAudience = builder.Configuration["Jwt:Audience"],
        IssuerSigningKey = new SymmetricSecurityKey(
            Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"]))
    };
});

builder.Services.AddAuthorization();

var app = builder.Build();

// 启用认证和授权中间件
app.UseAuthentication();
app.UseAuthorization();

确保这两个中间件在路由之后、控制器之前调用。

生成JWT令牌

创建一个简单的登录接口,在用户凭证验证通过后生成JWT令牌。

示例Controller代码:

[ApiController]
[Route("api/[controller]")]
public class AuthController : ControllerBase
{
    [HttpPost("login")]
    public IActionResult Login([FromBody] LoginModel model)
    {
        // 这里应验证用户名密码(可对接数据库或Identity)
        if (model.Username == "admin" && model.Password == "password")
        {
            var tokenHandler = new JwtSecurityTokenHandler();
            var key = Encoding.UTF8.GetBytes("your-very-secret-key-that-is-long-enough"); // 应从配置读取

            var tokenDescriptor = new SecurityTokenDescriptor
            {
                Subject = new ClaimsIdentity(new Claim[]
                {
                    new Claim(ClaimTypes.Name, model.Username),
                    new Claim(ClaimTypes.Role, "User") // 可扩展角色
                }),
                Expires = DateTime.UtcNow.AddHours(2),
                Issuer = "your-site.com",
                Audience = "users",
                SigningCredentials = new SigningCredentials(
                    new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256)
            };

            var token = tokenHandler.CreateToken(tokenDescriptor);
            var tokenString = tokenHandler.WriteToken(token);

            return Ok(new { Token = tokenString });
        }

        return Unauthorized();
    }
}

定义LoginModel:

public class LoginModel
{
    public string Username { get; set; }
    public string Password { get; set; }
}

保护API接口

使用 [Authorize] 特性标记需要认证的控制器或方法:

[Authorize]
[ApiController]
[Route("api/[controller]")]
public class SecureController : ControllerBase
{
    [HttpGet]
    public IActionResult Get()
    {
        var username = User.Identity.Name;
        return Ok(new { Message = $"Hello, {username}", Time = DateTime.Now });
    }
}

启动项目后,先调用 /api/auth/login 获取token,然后在后续请求的Header中添加:

Authorization: Bearer

如果token无效或过期,将返回401状态码。

配置JWT参数(推荐做法)

将JWT相关配置写入 appsettings.json

"Jwt": {
  "Key": "your-super-secret-key-must-be-long-enough-for-security",
  "Issuer": "your-site.com",
  "Audience": "users"
}

在代码中通过 builder.Configuration["Jwt:Key"] 读取,提高可维护性。

基本上就这些。只要配置好认证服务、生成token并正确传递,就能在ASP.NET Core中实现基础的JWT认证。实际项目中建议结合数据库验证用户、刷新token机制和更细粒度的权限控制。


# word  # js  # json  # go  # app  # iis  # 后端  # mac  # ai  # 路由  # microsoft  # 状态码  # c#  # 安全传输  # 架构  # 分布式  # 中间件  # Token  # 字符串  # 接口  # 数据库  # 令牌  # 是一种  # 身份验证  # 客户端  # 不需要  # 并在  # 所需  # 能在  # 这两个  # 创建一个 


相关文章: 如何快速搭建高效WAP手机网站?  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  建站之星导航菜单设置与功能模块配置全攻略  官网网站制作腾讯审核要多久,联想路由器newifi官网  移民网站制作流程,怎么看加拿大移民官网?  香港网站服务器数量如何影响SEO优化效果?  成都网站制作报价公司,成都工业用气开户费用?  阿里云网站制作公司,阿里云快速搭建网站好用吗?  ,怎么在广州志愿者网站注册?  建站主机空间推荐 高性价比配置与快速部署方案解析  网站制作公司排行榜,抖音怎样做个人官方网站  免费网站制作appp,免费制作app哪个平台好?  深圳网站制作平台,深圳市做网站好的公司有哪些?  建站之星如何快速解决建站难题?  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  如何选择建站程序?包含哪些必备功能与类型?  官网建站费用明细查询_企业建站套餐价格及收费标准指南  建站之星后台管理如何实现高效配置?  南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?  如何在IIS中新建站点并配置端口与IP地址?  宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?  成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?  建站之星伪静态规则如何设置?  宝华建站服务条款解析:五站合一功能与SEO优化设置指南  如何零成本快速生成个人自助网站?  百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?  建站之星如何通过成品分离优化网站效率?  C++用Dijkstra(迪杰斯特拉)算法求最短路径  公众号网站制作网页,微信公众号怎么制作?  如何基于云服务器快速搭建个人网站?  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?  如何在局域网内绑定自建网站域名?  如何选择CMS系统实现快速建站与SEO优化?  如何快速辨别茅台真假?关键步骤解析  长沙企业网站制作哪家好,长沙水业集团官方网站?  如何通过wdcp面板快速创建网站?  Python多线程使用规范_线程安全解析【教程】  青浦网站制作公司有哪些,苹果官网发货地是哪里?  如何选购建站域名与空间?自助平台全解析  建站之星安装模板失败:服务器环境不兼容?  定制建站流程步骤详解:一站式方案设计与开发指南  济南企业网站制作公司,济南社保单位网上缴费步骤?  如何在阿里云购买域名并搭建网站?  宝塔Windows建站如何避免显示默认IIS页面?  潮流网站制作头像软件下载,适合母子的网名有哪些?  如何通过虚拟主机快速搭建个人网站?  如何构建满足综合性能需求的优质建站方案?  如何用花生壳三步快速搭建专属网站?  测试制作网站有哪些,测试性取向的权威测试或者网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。