Вход в систему и регистрация с использованием.NET Core Web API
Я внедряю базу ролей аутентификации и авторизации в Asp.Net Web API Core 1.1 . Я использую токен JWT для генерации токена и аутентификации запроса, но я застрял, чтобы сопоставить имя пользователя и пароль с существующими таблицами базы данных, сгенерированными по умолчанию, по Identity. Как сопоставить пароль с PasswordHash и зарегистрировать нового пользователя. Есть ли какой-либо пример для реализации API входа и регистрации в.Net Core 1.1?
2 ответа
[HttpPost]
public async Task<IActionResult> Register([FromBody]UserModel model)
{
IdentityResult result;
if (!ModelState.IsValid) return BadRequest(ModelState);
var user = new ApplicationUser { UserName = model.UserName, Email = model.UserName };
result = await _userManager.CreateAsync(user, model.Password);
if (! result.Succeeded) return BadRequest(ModelState);
return Ok(new {userCreated=true, userName= model.UserName });
}
[HttpPost("login")]
public async Task<IActionResult> Login([FromBody]UserModel loginViewModel)
{
if (ModelState.IsValid)
{
var userFound = await _userManager.FindByNameAsync(loginViewModel.UserName);
if (userFound == null) return Unauthorized();
var userId = userFound?.Id;
// Claims, we endow this user
var claims = new[]
{
new Claim(Helpers.Constants.Strings.JwtClaimIdentifiers.Id, userId),
new Claim(Helpers.Constants.Strings.JwtClaimIdentifiers.Rol, Helpers.Constants.Strings.JwtClaims.ApiAccess),
new Claim("test2", "test2")
};
// Get options from app settings
var options = _configuration.GetSection(nameof(JwtIssuerOptions));
SymmetricSecurityKey _signingKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(_configuration["SecretKey"]));
// Configure JwtIssuerOptions
var token = new JwtSecurityToken
(
issuer: options[nameof(JwtIssuerOptions.Issuer)],
audience: options[nameof(JwtIssuerOptions.Audience)],
claims: claims,
expires: DateTime.UtcNow.AddMinutes(60), // token works 1 hour! (then invalidates)
notBefore: DateTime.UtcNow,
signingCredentials: new SigningCredentials(_signingKey, SecurityAlgorithms.HmacSha256)
);
return Ok(new { token = new JwtSecurityTokenHandler().WriteToken(token) });
}
return BadRequest();
}
Вы можете использовать UserManager для создания нового пользователя с методом public virtual Task<IdentityResult> CreateAsync(TUser user, string password)
а также
SignInManager для входа с указанным паролем, используя метод:public virtual Task<SignInResult> PasswordSignInAsync(TUser user, string password, bool isPersistent, bool lockoutOnFailure)