在ASP.NET Core中,使用JWT进行认证和授权是一种流行的方式。JWT是一种安全且可扩展的认证方法,可以在不需要存储用户数据的情况下实现用户身份验证。
以下是使用ASP.NET Core进行JWT登录的步骤:
使用NuGet包安装Microsoft.AspNetCore.Authentication.JwtBearer。
在 ConfigureServices 方法中添加以下代码:
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.RequireHttpsMetadata = false; options.SaveToken = true; options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuerSigningKey = true, IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(Configuration.GetSection("AuthSettings:Key").Value)), ValidateIssuer = false, ValidateAudience = false }; });
在ApplicationStartUp中启用JWT:
app.UseAuthentication();
编写登录控制器:
[Route("api/[controller]")]
[ApiController]
public class UserController : ControllerBase
{
private readonly UserManager
public UserController(UserManager userManager, SignInManager signInManager, IConfiguration configuration)
{
_userManager = userManager;
_signInManager = signInManager;
_configuration = configuration;
}
[HttpPost]
[Route("Login")]
public async Task Login([FromBody] LoginViewModel model)
{
var user = await _userManager.FindByNameAsync(model.Email);
if (user != null && await _userManager.CheckPasswordAsync(user, model.Password))
{
//创建claims
var claims = new[]
{
new Claim(JwtRegisteredClaimNames.Sub, user.UserName),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
new Claim(JwtRegisteredClaimNames.Email, user.Email)
};
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["AuthSettings:Key"]));
var token = new JwtSecurityToken(
issuer: _configuration["AuthSettings:Issuer"],
上一篇:ASP.NETCore使用IOptionsMonitor<T>在不同线程中抛出异常
下一篇:ASP.NETCore使用KeycloakJWTBearer身份验证时出现“状态码无法设置,因为响应已经开始”的错误提示。