新闻中心
.NET Web API如何实现JWT用户认证
在 .NET Web API 中实现 JWT 认证需先安装必要包,再配置 JWT 参数,接着创建令牌生成服务,然后在 Program.cs 中添加认证中间件,最后通过 [Authorize] 保护接口并返回 Token。

在 .NET Web API 中实现 JWT(JSON Web Token)用户认证,主要涉及生成令牌、配置认证中间件以及保护 API 资源。下面是一个简洁实用的实现流程。
1. 安装必要包
确保项目中安装了以下 NuGet 包:
- Microsoft.AspNetCore.Authentication.JwtBearer:用于配置 JWT 认证方案
- System.IdentityModel.Tokens.Jwt:用于生成和处理 JWT
- Microsoft.IdentityModel.Tokens:提供加密支持
可通过 NuGet 包管理器或命令行安装:
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
2. 配置 JWT 设置
在 appsettings.json 中添加 JWT 相关配置:
{
"JwtSettings": {
"Key": "your-very-secret-key-that-is-at-least-32-characters-long",
"Issuer": "your-api-site.com",
"Audience": "your-client-site.com",
"TokenExpirationInMinutes": 60
}
}创建一个对应的 C# 类来读取这些设置:
public class JwtSettings
{
public string Key { get; set; }
public string Issuer { get; set; }
public string Audience { get; set; }
public int TokenExpirationInMinutes { get; set; }
}在 Program.cs 中注册该配置:
builder.Configuration.GetSection("JwtSettings").Bind(new JwtSettings());
builder.Services.Configure<JwtSettings>(builder.Configuration.GetSection("JwtSettings"));3. 生成 JWT 令牌
创建一个服务用于生成令牌,例如:
public class TokenService
{
private readonly JwtSettings _jwtSettings;
<pre class='brush:php;toolbar:false;'>public TokenService(IOptions<JwtSettings> jwtSettings)
{
_jwtSettings = jwtSettings.Value;
}
public string GenerateToken(string userId, string role)
{
var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_jwtSettings.Key));
var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);
var claims = new[]
{
new Claim(JwtRegisteredClaimNames.Sub, userId),
new Claim(ClaimTypes.Role, role),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
};
var token = new JwtSecurityToken(
issuer: _jwtSettings.Issuer,
audience: _jwtSettings.Audience,
claims: claims,
expires: DateTime.Now.AddMinutes(_jwtSettings.TokenExpirationInMinutes),
signingCredentials: credentials
);
return new JwtSecurityTokenHandler().WriteToken(token);
}}
将服务注册到依赖注入:
Reachout.ai
一个AI驱动的视频开发平台,专为忙碌的企业家和销售团队打造
142
查看详情
builder.Services.AddScoped<TokenService>();
4. 配置 JWT 认证中间件
在 Program.cs 中启用 JWT Bearer 认证:
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["JwtSettings:Issuer"],
ValidAudience = builder.Configuration["JwtSettings:Audience"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["JwtSettings:Key"]))
};
});
<p>// 启用认证和授权中间件
app.UseAut
hentication();
app.UseAuthorization();5. 创建登录接口返回 Token
示例登录控制器:
[ApiController]
[Route("api/[controller]")]
public class AuthController : ControllerBase
{
private readonly TokenService _tokenService;
<pre class='brush:php;toolbar:false;'>public AuthController(TokenService tokenService)
{
_tokenService = tokenService;
}
[HttpPost("login")]
public IActionResult Login([FromBody] LoginModel model)
{
// 这里应验证用户名密码(可对接数据库或 Identity)
if (model.Username == "admin" && model.Password == "password")
{
var token = _tokenService.GenerateToken("1", "Admin");
return Ok(new { Token = token });
}
return Unauthorized();
}}
6. 保护 API 接口
使用 [Authorize] 特性保护需要认证的接口:
[ApiController]
[Route("api/[controller]")]
[Authorize]
public class SecureController : ControllerBase
{
[HttpGet]
public IActionResult Get()
{
return Ok(new { Message = "This is a secure endpoint.", User = User.Identity.Name });
}
<pre class='brush:php;toolbar:false;'>[HttpGet("admin")]
[Authorize(Roles = "Admin")]
public IActionResult AdminOnly()
{
return Ok(new { Message = "Only admins can see this." });
}}
客户端在请求时需在 Header 中携带 Token:
Authorization: Bearer <your-jwt-token>
基本上就这些。只要配置正确,.NET 的 JWT 支持非常稳定且易于扩展。注意密钥安全、过期时间合理设置,并结合 HTTPS 使用。
以上就是.NET Web API如何实现JWT用户认证的详细内容,更多请关注其它相关文章!
# 是一个
# 株洲网站建设招商电话
# 龙华网站关键词优化公司
# 种草营销推广行业佼佼者
# 天津靠谱的网站制作推广
# 周杰伦个人网站建设
# 湖北枣阳汉城网站推广
# 黔南网站优化如何收费
# seo___微博
# 淘宝seo书籍
# 新乡原阳网站推广
# 管理器
# 解决问题
# 中文网
# 相关文章
# 序列化
# word
# 如何将
# 创建一个
# 如何实现
# 令牌
# elif
# red
# .net
# c#
# microsoft
# ai
# mac
# app
# go
# json
# js
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
C#使用XPath查询节点时出错? 常见语法错误与调试技巧
内存检查:在VS Code中调试C++时的内存视图
CKEditor 5 自定义构建在React应用中渲染失败的调试与解决
word中如何让数字纵向排列_Word数字纵向排列方法
c++如何使用TBB库进行任务并行_c++ Intel线程构建模块
Yandex官网搜索引擎免登录_俄罗斯Yandex一键直达入口
谷歌google账号注册详细步骤 谷歌账号注册官方教程
Win10如何清理注册表垃圾 Win10注册表维护与优化指南【慎用】
解决深度学习模型训练初期异常高损失与完美验证准确率问题
PHP表单数据传递:如何通过隐藏输入字段获取动态ID
Tabulator表格日期时间排序问题及自定义解决方案
React Router v6 教程:构建认证保护的私有路由与重定向策略
mysql密码锁定怎么解锁_mysql密码锁定解锁后修改密码步骤
C++编译期如何执行复杂计算_C++模板元编程(TMP)技巧与应用
现代化 SciPy 一维插值:interp1d 的替代方案与最佳实践
windows10怎么关闭系统提示音_windows10彻底静音设置方法
win11开机启动修复循环怎么办 Win11无法进入系统高级启动解决方法【修复】
163邮箱登录密码 163邮箱忘记密码找回
抖音网页版快捷访问 抖音网页版网页版入口操作教程
vivo浏览器怎么扫描二维码 vivo浏览器内置扫一扫功能使用方法
TikTok国际版官网直达_TikTok国际版官网直达进入在线观看
PHP高效扁平化嵌套数组:使用array_merge与数组解包操作符
Angular Material 垂直步进器:实现底部到顶部排序的教程
邮编格式怎么匹配地址_根据邮编格式快速匹配详细地址的技巧
最新韩小圈网页版登录入口_官网在线观看官方链接
NRF24L01数据传输深度解析:解决大载荷接收异常与分包策略
QQ邮箱网页版登录入口 QQ邮箱官方在线使用平台
在哪找SublimeJ远程工具_SFTP插件配置教程
Pandas DataFrame 高效批量赋值:告别循环与笛卡尔积误区
html网页设计源代码怎么运行_运行html网页设计源代码步骤【指南】
谷歌浏览器无痕模式怎么开 Chrome开启无痕浏览设置方法【教程】
动漫花园资源网使用步骤_动漫花园资源网下载流程
如何提高微信支付的安全性_微信支付安全防护与设置建议
如何在Promise链中优雅地中断后续then执行
C++如何比较两个字符串_C++ string compare函数与操作符对比
将HTML动态表格多行数据保存到Google Sheet的教程
百度浏览器字体显示异常偏小_百度浏览器字体渲染修复方案
CSS Flexbox与媒体查询:实现响应式布局中元素的并排与堆叠
HTML转PPT成品工具有哪些?HTML网页转PPT成品工具大全
《主播少女的秘密账号迷宫》首支宣传片
TikTok国际版网页端快速入口 TikTok全球版短视频浏览教程
outlook中文官网入口地址 outlook官方中文版直达首页链接
mc.js官网登录入口 mc.js官方登录入口最新版
解决Rails应用中内容错位与Turbo警告:meta标签误用导致富文本渲染异常
使用 Pandas 高效处理 .dat 文件:字符清理与数据计算
J*a递归快速排序中静态变量导致数据累积问题的解决方案
163邮箱网页版入口导航平台 163邮箱网页版登录入口官网导航
Win10系统服务哪些可以禁用 Win10安全优化服务列表【干货】
Win11怎么设置鼠标主按键_Win11鼠标左右键功能互换
Go语言中高效处理x-www-form-urlencoded表单数据


2025-11-15
浏览次数:次
返回列表
hentication();
app.UseAuthorization();