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 });
        }
Exemple #2
0
        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);
        }