一、创建项目
我这里使用的.Net Core 3.1
再建两个文件夹用来保存控制器和类
依赖包
二、创建实体类 映射数据库
ToTable表名 ,HasColumnName中映射数据库中的列名,大小写保持一致
三、配置appsettings.json建立数据库连接
"ConnectionStrings": {
"DBConnection": "User Id=ADMIN;Password=666666;Data Source=127.0.0.1/ORCL"
},
四、JWT配置
配置Jwt身份验证
创建一个Jwt映射类
public class JwtParam
{
public bool ValidateIssuerSigningKey { get; set; }
public string ValidIssuerSigningKey { get; set; }
public bool ValidateIssuer { get; set; }
public string ValidIssuer { get; set; }
public bool ValidateAudience { get; set; }
public string ValidAudience { get; set; }
public bool ValidateLifetime { get; set; }
public uint ValidLifetime { get; set; }
}
Startup.cs中身份认证
五、登录
创建控制器 LoginController.cs
//[Authorize] ///Jwt权限
[ApiController]
[Route("[controller]/[action]")]
public class LoginController : Controller
{
private readonly NetCoreContext _db;
private readonly JwtParam _jwtParam;
private readonly IConfiguration _cfg;
public LoginController(NetCoreContext db, JwtParam jwtParam, IConfiguration cfg)
{
_db = db;
_cfg = cfg;
_jwtParam = jwtParam;
}
[HttpPost]
//[AllowAnonymous] //跳过jwt权限验证
public async Task<ActionResult> Login([FromBody] User _user)
{
var user = await _db.User.FirstOrDefaultAsync(x => x.UserName == _user.UserName);
if (user == null)
{
return Ok(new { status = "NoUserName" });
}
if (user.PassWord != _user.PassWord)
{
return Ok(new { status = "ErrorPassword" });
}
var token = new JwtSecurityTokenHandler().CreateToken(new SecurityTokenDescriptor
{
Audience = _jwtParam.ValidAudience,
Issuer = _jwtParam.ValidIssuer,
SigningCredentials = new SigningCredentials(
new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_jwtParam.ValidIssuerSigningKey)),
SecurityAlgorithms.HmacSha256),
Subject = new ClaimsIdentity(new[]
{
new Claim(ClaimTypes.Name, user.UserName),
new Claim("name", user.UserName.ToString())
})
});
return Ok(new
{
status = "Ok",
token = new JwtSecurityTokenHandler().WriteToken(token),
});
}
}