Content

asp.net?core?中的Jwt(Json?Web?Token)的使用详解(.net core jwt刷新token)没想到

文章摘要

该文章介绍了一个使用 ASP.NET Core 创建的Controller类(Test3Controller),该类通过依赖注入实现了基于JWT的安全登录功能。类中定义了一个使用[HttpGet]标签的Action方法(Login),用于验证用户名和密码是否正确。当验证通过时,该方法生成一个带有JWT头和第二阶段信息的签名令牌,并返回该令牌作为JSON Web Token(JWT)字符串。文章重点描述了类的结构、依赖注入配置以及基于JWT的安全登录实现逻辑。

using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; using Microsoft.IdentityModel.Tokens; using System.IdentityModel.Tokens.Jwt; using System.Security.Claims; using System.Text; namespace aspnetcore013.Controllers { [Route(“api/[controller]/[action]”)] [ApiController] public class Test3Controller : ControllerBase { //用于 依赖注入 private readonly IOptionsSnapshot<JWTSetting> _settings; //注入 设置 public Test3Controller(IOptionsSnapshot<JWTSetting> settings) { _settings=settings; } [HttpGet] public ActionResult<string> Login(string userName,string passWord) { if(userName==”zhangsan”&& passWord==”123456″) { //这里已经 表明 登录 成功 //Claim为 JWT第二阶段的 payload List<Claim> claims=new List<Claim>(); claims.Add(new Claim(ClaimTypes.NameIdentifier, “66”)); claims.Add(new Claim(ClaimTypes.Name, “zhangsan”)); claims.Add(new Claim(“Wechat”, “jiujiu56”));//自定义 type名称 claims.Add(new Claim(ClaimTypes.Role, “admin”)); //下面为生成 JWT string configkey=_settings.Value.Key; DateTime outTime=DateTime.Now.AddSeconds(_settings.Value.OutTime); byte[] byteKey=Encoding.UTF8.GetBytes(configkey); var securityKey=new SymmetricSecurityKey(byteKey); var credentials=new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256Signature); //设置 JWT第二阶段的 payload 和过期 时间 和 效验算法 var securityToken=new JwtSecurityToken(claims: claims, expires: outTime, signingCredentials: credentials); string jwt=new JwtSecurityTokenHandler().WriteToken(securityToken); return jwt; } else { return BadRequest(“登录失败”); } } } }