private object GetAuthTokens(ApplicationUser user, bool generateConfirmationToken = false) { var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(AppSettings.Secret)); var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256); var claims = new[] { new Claim(ClaimTypes.NameIdentifier, user.Id), new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()) }; var token = new JwtSecurityToken(issuer: AppSettings.Issuer, audience: AppSettings.Audition, claims, expires: DateTime.Now.AddMinutes(5), signingCredentials: credentials); var accessToken = new JwtSecurityTokenHandler().WriteToken(token); CustomTokensDecorator additional = (CustomTokens customTokens) => { userBehaviour.ClearTokenNoUpdate(customTokens); if (generateConfirmationToken) { userBehaviour.GenerateConfirmationTokenNoUpdate(customTokens); new Thread(() => { emailSender.SendEmailConfirmationTokenMessage(user.Email, customTokens.ConfirmationTokenValue); }) { Priority = ThreadPriority.BelowNormal, IsBackground = true }.Start(); } }; var refreshToken = userBehaviour.GenerateCustomToken(user.Id, TokenType.Refresh, additional).RefreshTokenValue; return(new { Id = user.Id, name = user.FullName, extension = user.Extension, email = user.Email, accessToken = accessToken, refreshToken = refreshToken }); }
public CustomTokens GenerateCustomToken(string userId, TokenType type, CustomTokensDecorator additional = null)//1 + 1 { var tokens = userRepository.GetGenerateUserCustomTokens(userId); if (type == TokenType.Confirmation) { GenerateCustomConfirmationToken(tokens); } else if (type == TokenType.Reset) { GenerateCustomResetToken(tokens); } else { GenerateRefreshToken(tokens); } additional?.Invoke(tokens); userRepository.UpdateUserCustomTokens(tokens); return(tokens); }