/// <summary>
        /// Attempts to acquire access token from the token cache silently by calling AcquireTokenSilentAsync
        /// </summary>
        internal async Task <AuthenticationResult> GetAccessTokenSilentAsync(MsalAuthenticationProviderOption msalAuthProviderOption)
        {
            IAccount account = null;

            if (msalAuthProviderOption.UserAccount?.ObjectId != null)
            {
                // Parse GraphUserAccount to IAccount instance
                account = new GraphAccount(msalAuthProviderOption.UserAccount);
            }
            else
            {
                // If no graph user account is passed, try get the one in cache.
                IEnumerable <IAccount> accounts = await ClientApplication.GetAccountsAsync();

                account = accounts.FirstOrDefault();
            }

            if (account == null)
            {
                return(null);
            }

            try
            {
                return(await ClientApplication.AcquireTokenSilentAsync(
                           msalAuthProviderOption.Scopes ?? Scopes,
                           account,
                           ClientApplication.Authority,
                           msalAuthProviderOption.ForceRefresh));
            }
            catch (MsalUiRequiredException msalUiEx)
            {
                return(null);
            }
            catch (MsalServiceException serviceException)
            {
                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);
            }
        }