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

在现代 Web 应用开发中,JWT(JSON Web Token)是一种广泛使用的无状态身份验证机制。C# 结合 ASP.NET Core 可以非常方便地实现 JWT 认证与授权。下面介绍如何在 ASP.NET Core 项目中完整实现 JWT 用户登录认证和接口访问授权。
要在项目中启用 JWT 认证,首先需要在 Program.cs 或 Startup.cs 中配置认证服务。
确保安装了以下 NuGet 包:在 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 令牌并返回给客户端。
创建一个登录接口,例如:
[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
专业级AI人像摄影工作室
36
查看详情
[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")
在 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
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。