C# 如何实现 JWT 用户认证和授权_C# JWT 认证授权实现教程


首先配置JWT认证服务并添加认证授权中间件,然后生成包含用户信息的JWT令牌,接着通过[Authorize]特性保护接口,最后在appsettings.json中设置JWT参数,确保密钥安全及中间件顺序正确。

c# 如何实现 jwt 用户认证和授权_c# jwt 认证授权实现教程

在现代 Web 应用开发中,JWT(JSON Web Token)是一种广泛使用的无状态身份验证机制。C# 结合 ASP.NET Core 可以非常方便地实现 JWT 认证与授权。下面介绍如何在 ASP.NET Core 项目中完整实现 JWT 用户登录认证和接口访问授权。

配置 JWT 认证服务

要在项目中启用 JWT 认证,首先需要在 Program.cs 或 Startup.cs 中配置认证服务。

确保安装了以下 NuGet 包:
  • Microsoft.AspNetCore.Authentication.JwtBearer
  • System.IdentityModel.Tokens.Jwt

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

var builder = WebApplication.CreateBuilder(args);
<p>// 添加认证服务
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"]))
};
});</p><p>// 添加授权服务
builder.Services.AddAuthorization();</p><p>var app = builder.Build();</p><p>// 启用认证和授权中间件
app.UseAuthentication();
app.UseAuthorization();

生成 JWT 令牌

当用户登录成功后,服务器应生成 JWT 令牌并返回给客户端。

创建一个登录接口,例如:

[ApiController]
[Route("api/[controller]")]
public class AuthController : ControllerBase
{
    private readonly IConfiguration _configuration;
<pre class="brush:php;toolbar:false;">public AuthController(IConfiguration configuration)
{
    _configuration = configuration;
}

[HttpPost("login")]
public IActionResult Login([FromBody] LoginModel model)
{
    // 示例:简单验证用户名密码(实际应查询数据库)
    if (model.Username == "admin" && model.Password == "123456")
    {
        var token = GenerateJwtToken(model.Username);
        return Ok(new { Token = token });
    }
    return Unauthorized();
}

private string GenerateJwtToken(string username)
{
    var securityKey = new SymmetricSecurityKey(
        Encoding.UTF8.GetBytes(_configuration["Jwt:Key"]));
    var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);

    var claims = new[]
    {
        new Claim(JwtRegisteredClaimNames.Sub, username),
        new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
        new Claim(ClaimTypes.Name, username)
    };

    var token = new JwtSecurityToken(
        issuer: _configuration["Jwt:Issuer"],
        audience: _configuration["Jwt:Audience"],
        claims: claims,
        expires: DateTime.Now.AddMinutes(30),
        signingCredentials: credentials
    );

    return new JwtSecurityTokenHandler().WriteToken(token);
}

}

使用授权保护接口

通过 [Authorize] 特性可以限制只有携带有效 JWT 的请求才能访问特定接口。

示例:受保护的 API 接口

Primeshot Primeshot

专业级AI人像摄影工作室

Primeshot 36 查看详情 Primeshot
[ApiController]
[Route("api/[controller]")]
public class SecureController : ControllerBase
{
    [HttpGet]
    [Authorize]
    public IActionResult GetSecret()
    {
        return Ok(new { Message = "你已通过认证", User = User.Identity.Name });
    }
<pre class="brush:php;toolbar:false;">[HttpGet("admin")]
[Authorize(Roles = "Admin")]
public IActionResult GetAdminData()
{
    return Ok(new { Message = "管理员专用数据" });
}

}

上面的例子中,第一个接口要求用户登录即可访问,第二个接口还要求用户具有 Admin 角色。

若需支持角色,可在生成 Token 时添加角色声明:

new Claim(ClaimTypes.Role, "Admin")

配置 JWT 参数

在 appsettings.json 中定义 JWT 配置:

{
  "Jwt": {
    "Key": "your-very-secret-key-that-is-long-enough",
    "Issuer": "https://localhost:5001",
    "Audience": "https://localhost:5001"
  }
}

密钥长度建议至少 32 字符,使用强随机字符串以保证安全。

基本上就这些。只要正确配置认证服务、生成 Token 并在请求头中携带 Bearer Token,ASP.NET Core 就能自动完成验证。前端发送请求时,记得在 Header 中加上:

Authorization: Bearer <your-jwt-token>

不复杂但容易忽略的是中间件顺序:UseAuthentication 必须在 UseAuthorization 之前。

以上就是C# 如何实现 JWT 用户认证和授权_C# JWT 认证授权实现教程的详细内容,更多请关注其它相关文章!


# js  # vr推广营销技巧  # SEO人才落户武汉租房  # 阿里云设置页面seo  # 泰州关键词排名优化讯息  # 第一个  # 是一种  # 序列化  # 的是  # 操作指南  # 如何处理  # 如何在  # 如何实现  # 用户登录  # eli  # word  # 前端  # json  # go  # app  # mac  # ai  # microsoft  # 应用开发  # c#  # .net  # red  # 令牌  # 湘西谷歌seo推荐  # 潍坊网站推广v1  # 沧州英文网站推广哪家好  # 进行营销推广方式有哪些  # 姑苏区网站建设推广公司  # seo资源网介绍 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894 】


相关推荐: C#解析并修改XML后保存 如何确保格式与编码的正确性  精通VS Code多光标编辑以实现闪电般快速的修改  快手极速版在线体验区 快手极速版网页体验入口  优化 WooCommerce 产品价格显示与自定义短代码集成  怎样设置开机后自动运行某个程序_Windows启动文件夹与任务计划【自动化】  《画加》约稿流程  手机雨课堂网页版入口免登录 雨课堂网页版可点击直接进入  知音漫客官网首页入口_知音漫客热门漫画推荐  行者app怎样导出日志  申通快件单号查询平台 申通包裹物流动态跟踪  C++ optional用法详解_C++17处理可能为空的返回值  使用VS Code作为你的个人知识管理系统  基于 Flink 和 Kafka 实现高效流处理:连续查询与时间窗口  修复UI元素交互障碍:从“开始”按钮到信息框的平滑过渡实现  使用 .htaccess 正确配置 WordPress 子目录重定向与路径保留  qq音乐官方网站入口_qq音乐在线听歌网页版链接  iQOO手机信号差网络不稳定怎么办 信号问题原因排查与增强设置【攻略】  《领英》查看屏蔽名单方法  猫眼电影app怎么查询电影院的营业时间_猫眼电影影院营业时间查询教程  macosmonterey系统外接显示器驱动怎么安装_macosmonterey外接显示器驱动与分辨率调整  鲨鱼剧场app金币获取方法  Python项目中的条件导入:解决跨模块依赖问题  偃武诸葛亮阵容搭配推荐  抖音官网入口快速访问 抖音网页版账号注册解析  掌握Go App Engine项目结构与GOPATH:包管理与导入实践  lol小红书怎么|直播|?lol小红书|直播|是什么意思?  如何通过settings.json个性化您的VS Code体验  Win10锁屏时间怎么设置 Win10调整自动锁屏时间方法  PHP中获取HTTP响应状态消息:方法与限制  SQLAlchemy 2.0 与 Pydantic 模型类型安全集成指南  《蓝色星原:旅谣》坐骑获取攻略  CDR如何复制交互式填充色  《海贝音乐》均衡器设置方法  mysql镜像配置如何设置用户权限组_mysql镜像配置用户组与权限分级管理方法  掌握CSS :has() 选择器:父选择器、嵌套限制与常见陷阱解析  使用TinyButStrong生成HTML并结合Dompdf创建PDF教程  Go语言反射机制下访问嵌入结构体中的被遮蔽方法  4399小游戏下装链接 4399小游戏下载链接入口  Lar*el如何创建自定义的辅助函数(Helpers)_Lar*el全局函数定义与加载方法  小红书网页版怎么进 小红书网页版通用入口  我居然低估了 DeepSeek,这次更新它做到了这些!  稻壳阅读器官方直达网址链接 稻壳阅读器文档阅读平台主页资源入口  网易云音乐闹钟铃声设置教程  c++如何掌握指针的核心用法_c++指针入门到精通指南  利用Flexbox实现图片元素的二维布局:2x2网格排列指南  Python高效统计字典嵌套列表值在目标列表中的出现次数  纯CSS实现滚动时动态时间轴线条颜色填充效果  LocoySpider如何批量采集电商商品_LocoySpider电商采集的模板应用  PHP utf8_encode 字符编码转换陷阱与解决方案  解决CSS容器溢出问题:使用calc()实现精确布局与边距控制 

 2025-11-19

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.