这篇文章是关于ASP.NET Core中基于令牌的身份验证。基于令牌的身份验证系统背后的一般概念很简单。允许用户输入用户名和密码,以获取允许他们获取特定资源的令牌 - 而无需使用他们的用户名和密码。一旦获得其令牌,用户就可以向远程站点提供令牌 - 其提供对特定资源的访问一段时间。
要使用令牌或JWT身份验证,首先需要配置JWT身份验证中间件。
public void ConfigureServices(IServiceCollection services) { services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(jwtBearerOptions => { jwtBearerOptions.TokenValidationParameters = new TokenValidationParameters() { ValidateActor = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = Configuration["Issuer"], ValidAudience = Configuration["Audience"], IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["SigningKey"])), ValidateLifetime = true, ValidateIssuer = true, ValidateAudience = true, }; }); services.AddMvc(); }
您已完成配置,现在需要将身份验证中间件添加到应用程序构建器。你可以在Configure
方法中做到这一点。
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseAuthentication(); app.UseMvc(); }
现在您需要一个控制器操作方法,它可以帮助用户生成令牌。
[AllowAnonymous] [HttpPost] [Route("token")] public IActionResult Post([FromBody]LoginViewModel loginViewModel) { if (ModelState.IsValid) { //This method returns user id from username and password. var userId = GetUserIdFromCredentials(loginViewModel); if (userId == -1) { return Unauthorized(); } var claims = new[] { new Claim(JwtRegisteredClaimNames.Sub, loginViewModel.Username), new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()) }; var token = new JwtSecurityToken ( issuer: _configuration["Issuer"], audience: _configuration["Audience"], claims: claims, expires: DateTime.UtcNow.AddDays(60), notBefore: DateTime.UtcNow, signingCredentials: new SigningCredentials(new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["SigningKey"])), SecurityAlgorithms.HmacSha256) ); return Ok(new { token = new JwtSecurityTokenHandler().WriteToken(token) }); } return BadRequest(); }
现在,您可以使用[Authorize]
属性保护资源。
[Authorize] [Route("api/[controller]")] public class ValuesController : Controller { [HttpGet] public IEnumerable<string> Get() { return new string[] { "value1", "value2" }; } }
这是没有标题的POSTMAN get请求的屏幕截图。
现在,您可以使用令牌端点使用用户名和密码生成令牌,这将生成令牌。
接下来,您可以使用Authorization标头请求值控制器,其中包含从令牌端点接收的令牌,该令牌将返回值。
如果你正在使用JQuery,你可以像这样使用JQuery Ajax方法。
$.ajax({ type: 'GET', url: '/api/values', headers: { "Authorization": "Bearer YOUR-TOKEN" } }).done(function (data) { console.log(data); });
本问翻译自https://dotnetthoughts.net/token-based-authentication-in-aspnet-core/
GitHub地址:https://github.com/anuraj/AspNetCoreSamples/tree/master/WebApiAuthDemo
来自:https://blog.csdn.net/haitaoDoit/article/details/86607346?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-1.essearch_pc_relevant&spm=1001.2101.3001.4242.2
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
2017-12-08 .NET CORE 2.0小白笔记(二):VS插件 ReSharper Ultimate 2017 安装破解
2017-12-08 .net core 2.0小白笔记(一):开发运行环境搭建