public async Task <AccessTokenDTO> GenerateFreshToken(ClaimsPrincipal principal, string refreshToken) { var username = principal.Claims.ElementAt(0).Value; var user = await _unitOfWork.User.FindOneAsync(u => u.Email == username); //retrieve the refresh token from a data store if (user != null) { if (user.RefreshToken != refreshToken) { throw new SecurityTokenException("Nieważny token odświeżania"); } var tokenHandler = new JwtSecurityTokenHandler(); var tokenKey = Encoding.ASCII.GetBytes("Tomojsekretnyklucz"); var tokenDescriptor = new SecurityTokenDescriptor { //Token contain Subject = new ClaimsIdentity(new Claim[] { new Claim(ClaimTypes.Name, principal.Claims.ElementAt(0).Value), new Claim(ClaimTypes.Role, principal.Claims.ElementAt(1).Value) }), Expires = DateTime.UtcNow.AddMinutes(30), SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(tokenKey), SecurityAlgorithms.HmacSha256) }; var token = tokenHandler.CreateToken(tokenDescriptor); var writeToken = tokenHandler.WriteToken(token); var newRefreshToken = GenerateRefreshTokenJwt.GenerateRefreshToken(); user.RefreshToken = newRefreshToken; await _unitOfWork.SaveChangesAsync(); return(new AccessTokenDTO() { AccessToken = writeToken, RefreshToken = newRefreshToken }); } return(null); }
public async Task <AccessTokenDTO> GenerateToken(string email) { var user = await _unitOfWork.User.FindOneAsync(u => u.Email == email); if (user != null) { var role = await _userManager.GetRolesAsync(user); var tokenHandler = new JwtSecurityTokenHandler(); var tokenKey = Encoding.ASCII.GetBytes("Tomojsekretnyklucz"); var tokenDescriptor = new SecurityTokenDescriptor { //Token contain Subject = new ClaimsIdentity(new Claim[] { new Claim(ClaimTypes.Name, email), new Claim(ClaimTypes.Role, role[0]) }), Expires = DateTime.UtcNow.AddMinutes(30), SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(tokenKey), SecurityAlgorithms.HmacSha256) }; var token = tokenHandler.CreateToken(tokenDescriptor); var writeToken = tokenHandler.WriteToken(token); var refreshToken = GenerateRefreshTokenJwt.GenerateRefreshToken(); user.RefreshToken = refreshToken; await _unitOfWork.SaveChangesAsync(); return(new AccessTokenDTO() { AccessToken = writeToken, RefreshToken = refreshToken }); } return(null); }