新闻中心
C# 如何实现 JWT 用户认证和授权_C# JWT 认证授权实现教程
首先配置JWT认证服务并添加认证授权中间件,然后生成包含用户信息的JWT令牌,接着通过[Authorize]特性保护接口,最后在appsettings.json中设置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, Securit
yAlgorithms.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 接口
mallcloud商城
mallcloud商城基于SpringBoot2.x、SpringCloud和SpringCloudAlibaba并采用前后端分离vue的企业级微服务敏捷开发系统架构。并引入组件化的思想实现高内聚低耦合,项目代码简洁注释丰富上手容易,适合学习和企业中使用。真正实现了基于RBAC、jwt和oauth2的无状态统一权限认证的解决方案,面向互联网设计同时适合B端和C端用户,支持CI/CD多环境部署,并提
0
查看详情
[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 认证授权实现教程的详细内容,更多请关注其它相关文章!
# 网站站内seo优化比较详细的流程
# 的是
# 互联网
# 序列化
# 是一种
# 第一个
# 就能
# wordpress 网站建设中
# 宜宾网站的推广
# 如何将
# 赵县机械网站建设报价
# 解放碑网站建设推广
# 清港网站推广费用
# 微网站建设管理文案
# 湖北seo获客价格
# 惠州定制网站建设方案
# 网站seo关键词排名优化怎么做
# 应用开发
# js
# 前端
# json
# go
# app
# mac
# ai
# microsoft
# word
# c#
# .net
# red
# eli
# 令牌
# 用户登录
# 如何实现
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
sublime怎么进行远程开发编辑_配置rsub/rmate实现sublime编辑服务器文件
电脑IP地址怎么查 查看本机IP地址的几种方法
支付宝碰一碰设备是REDMI手机吗 博主拆机辟谣:处理器、内存都不一样
精准捕获:如何在页面中监听除特定元素外的所有点击事件
J*aScript对象创建方式_J*aScript设计模式应用
手机CPU怎么影响游戏体验_手机CPU对游戏性能的影响分析
处理Kafka消费者会话超时:深入理解消息处理语义与幂等性
双系统安装时,如何设置默认启动系统? msconfig命令了解一下!
c++ 命名空间怎么用 c++ namespace使用指南
Pyrogram与g4f集成:异步编程实践与常见错误解决
如何使用spryker/configurable-bundles-products-resource-relationship模块解决复杂产品捆绑关系难题
b站怎么删除评论_b站评论管理与删除操作
Golang如何优雅处理error_Golang error处理最佳实践总结
PrimeNG Sidebar背景色自定义指南:CSS覆盖与主题化实践
c++如何实现一个简单的ECS框架_c++数据驱动设计与游戏开发
TikTok评论显示延迟如何处理 TikTok评论刷新优化方法
Typer应用中灵活处理命令行参数的令牌化与解析
利用Bokeh CustomJS动态控制DataTable列可见性
文心一言怎样用批量生成做多版文案_文心一言用批量生成做多版文案【批量创作】
c++如何使用TBB库进行任务并行_c++ Intel线程构建模块
深入理解与实现最大堆的Heapify过程:常见错误与修正
在J*a中如何捕获IndexOutOfBoundsException_索引越界异常防护方法说明
QQ邮箱官方邮箱登录入口 QQ邮箱网页版快速访问
Composer如何在生产环境安全地执行composer update
构建轻量级网站内部消息系统:Formspree 集成指南
今日头条怎么同步内容到抖音_今日头条内容同步到抖音教程
AI抖音网页版免费视频入口 AI抖音网页端最新视频实时观看
QQ邮箱网页版登录入口 QQ邮箱官方在线使用平台
TikTok搜索结果不显示如何解决 TikTok搜索刷新优化方法
Python自定义类排序:解决lambda键值访问TypeError的实践指南
React项目中导航栏Logo自适应布局:避免裁剪与布局溢出
zookeeper 都有哪些功能?
《刺客信条4:黑旗》重制版新细节曝光:无缝加载 地图更细致!
uc浏览器网页版极速入口 uc网页浏览器网页版流畅体验
拼多多购物车商品数量无法修改如何处理 拼多多购物车操作优化方法
抖音网页版快捷访问 抖音网页版网页版入口操作教程
如何将HTML表格多行数据保存到Google Sheets
必由学官网首页入口 必由学教师网页版登录指南
sublime如何处理大型CSV文件的列对齐_sublime高级表格编辑插件指南
汽水音乐在线版入口_汽水音乐网页播放手册
抖音网页版平台入口 抖音网页版官网在线访问教程
Windows7怎么硬盘安装 Windows7提取ISO镜像到非系统盘并运行setup.exe实现硬盘直装【教程】
iwriter统一登录平台 iwrite账号密码登录页面
Win10如何恢复误删的快捷方式_Win10重建常用软件快捷方式
最新韩小圈网页版登录入口_官网在线观看官方链接
sublime怎么预览Markdown渲染效果_Markdown Preview插件 for sublime教程
中兴BladeV30怎样用测距估书架层高_iPhone中兴BladeV30测距估书架层高【家装参考】
微信网页版官方入口教程 微信网页版网页版快速登录步骤
红果短剧网页版官网入口 官方最新网址发布
解决Rails应用中内容错位与Turbo警告:meta标签误用导致富文本渲染异常


2025-11-19
浏览次数:次
返回列表
yAlgorithms.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);
}