private async Task <AuthenticationResult> GetNewAccessTokenAsync(AuthenticationProviderOption msalAuthProviderOption)
        {
            AuthenticationResult authenticationResult = null;
            int retryCount = 0;

            do
            {
                try
                {
                    if (!string.IsNullOrEmpty(msalAuthProviderOption.UserAccount?.Email))
                    {
                        authenticationResult = await ClientApplication.AcquireTokenByIntegratedWindowsAuth(msalAuthProviderOption.Scopes)
                                               .WithUsername(msalAuthProviderOption.UserAccount.Email)
                                               .ExecuteAsync();
                    }
                    else
                    {
                        authenticationResult = await ClientApplication.AcquireTokenByIntegratedWindowsAuth(Scopes)
                                               .ExecuteAsync();
                    }
                    break;
                }
                catch (MsalServiceException serviceException)
                {
                    if (serviceException.ErrorCode == ErrorConstants.Codes.TemporarilyUnavailable)
                    {
                        TimeSpan delay = this.GetRetryAfter(serviceException);
                        retryCount++;
                        // pause execution
                        await Task.Delay(delay);
                    }
                    else
                    {
                        throw new AuthenticationException(
                                  new Error
                        {
                            Code    = ErrorConstants.Codes.GeneralException,
                            Message = ErrorConstants.Message.UnexpectedMsalException
                        },
                                  serviceException);
                    }
                }
                catch (Exception exception)
                {
                    throw new AuthenticationException(
                              new Error
                    {
                        Code    = ErrorConstants.Codes.GeneralException,
                        Message = ErrorConstants.Message.UnexpectedException
                    },
                              exception);
                }
            } while (retryCount < msalAuthProviderOption.MaxRetry);

            return(authenticationResult);
        }