Esempio n. 1
0
        ///<inheritdoc/>
        protected override async Task RenewAccessTokenAsync()
        {
            AuthenticationResult result;

            try
            {
                result = await PublicClient.AcquireTokenSilent(ApiTokenAccessArgs.Scopes, ApiTokenAccessArgs.UserAccount).ExecuteAsync();

                if (string.IsNullOrEmpty(result.AccessToken))
                {
                    throw new MsalUiRequiredException("404", "Access token was null");
                }
            }
            catch (MsalUiRequiredException)
            {
                result = await PublicClient.AcquireTokenInteractive(ApiTokenAccessArgs.Scopes)
                         .WithB2CAuthority(AuthoritySUSI)
                         .WithAccount(ApiTokenAccessArgs.UserAccount)
                         .WithParentActivityOrWindow(Context.GetMainWindow())
                         .ExecuteAsync()
                         .ConfigureAwait(false);
            }
            catch
            {
                throw;
            }
            AccessToken = AccessToken.Bearer(result.AccessToken, result.ExpiresOn);

            IdToken = result.IdToken;

            TokenRenewed?.Invoke(result);
        }
        private async Task <bool> RenewTokensAsync(CancellationToken cancellationToken)
        {
            if (await _lock.WaitAsync(Timeout, cancellationToken).ConfigureAwait(false))
            {
                try
                {
                    var response = await _tokenClient.RequestClientCredentialsAsync(_scope, cancellationToken : cancellationToken).ConfigureAwait(false);

                    if (!response.IsError)
                    {
                        _accessToken = response.AccessToken;

#pragma warning disable 4014
                        Task.Run(() =>
                        {
                            foreach (EventHandler <TokenRenewedEventArgs> del in TokenRenewed.GetInvocationList())
                            {
                                try
                                {
                                    del(this, new TokenRenewedEventArgs(response.AccessToken, response.ExpiresIn));
                                }
                                catch { }
                            }
                        }).ConfigureAwait(false);
#pragma warning restore 4014

                        return(true);
                    }
                }
                finally
                {
                    _lock.Release();
                }
            }

            return(false);
        }
Esempio n. 3
0
 /// <summary>
 /// Fire the <see cref="TokenRenewed"/> event.
 /// </summary>
 /// <param name="e"></param>
 protected virtual void OnTokenRenewed(TokenRenewedEventArgs e)
 {
     TokenRenewed?.Invoke(this, e);
 }