Ejemplo n.º 1
0
        /// <summary>
        /// GetAuthenticationDetailAsync
        /// </summary>
        /// <returns></returns>
        public async Task <OAuth2AccessResponse> GetAuthenticationDetailAsync()
        {
            var mailResponse = new OAuth2AccessResponse();
            var token        = string.Empty;

            try
            {
                token = _clientConfig.MailDataStore.Get($"{_clientConfig.MailDataStore.StoreKey}_MSMailToken") as string;

                if (string.IsNullOrEmpty(token))
                {
                    mailResponse.ErrorMessage = "Access Token has expired.";
                }


                if (string.IsNullOrWhiteSpace(token))
                {
                    var msalCache   = new TokenCacheModel.MicrosoftTokenStore(_clientConfig.MailDataStore, DateTimeOffset.Now.AddDays(90));
                    var msalSession = msalCache.GetMsalCacheInstance();
                    var cca         = new ConfidentialClientApplication(_clientConfig.OAuth2TokenizeRequestInfo.ClientId, _clientConfig.OAuth2TokenizeRequestInfo.RedirectUrl, new ClientCredential(_clientConfig.OAuth2TokenizeRequestInfo.ClientSecret), msalSession, null);

                    var accounts = await cca.GetAccountsAsync();

                    if (accounts != null && accounts.Any())
                    {
                        var graphScopes = _clientConfig.OAuth2TokenizeRequestInfo.Scope.Split(' ');
                        var result      = await cca.AcquireTokenSilentAsync(graphScopes, accounts.First(), null, true).ConfigureAwait(false);;

                        if (result != null)
                        {
                            _clientConfig.MailDataStore.Add($"{_clientConfig.MailDataStore.StoreKey}_MSMailToken", result.AccessToken, result.ExpiresOn);

                            token = result.AccessToken;
                        }
                    }

                    if (string.IsNullOrWhiteSpace(token))
                    {
                        mailResponse.ErrorMessage += " Re-authenticate.";
                    }
                }
            }
            catch (Exception ex)
            {
                mailResponse.ErrorMessage += ex.Message;
            }

            mailResponse.IsSucces = !string.IsNullOrWhiteSpace(token);
            mailResponse.Token    = token;
            _token = token;
            return(mailResponse);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// AuthenticateAsync
        /// </summary>
        /// <param name="code"></param>
        /// <returns></returns>
        public async Task <OAuth2AccessResponse> AuthenticateAsync(string code)
        {
            var mailResponse           = new OAuth2AccessResponse();
            var refreshTokenExpireDate = DateTimeOffset.Now.AddDays(90);

            var graphScopes    = _clientConfig.OAuth2TokenizeRequestInfo.Scope.Split(' ');
            var userTokenCache = new TokenCacheModel.MicrosoftTokenStore(_clientConfig.MailDataStore, refreshTokenExpireDate).GetMsalCacheInstance();
            var cca            = new ConfidentialClientApplication(_clientConfig.OAuth2TokenizeRequestInfo.ClientId, _clientConfig.OAuth2TokenizeRequestInfo.RedirectUrl, new ClientCredential(_clientConfig.OAuth2TokenizeRequestInfo.ClientSecret), userTokenCache, null);

            _clientConfig.OAuth2TokenizeRequestInfo.AuthorizedCode = code;
            var result = await cca.AcquireTokenByAuthorizationCodeAsync(code, graphScopes).ConfigureAwait(false);;

            _clientConfig.MailDataStore.Add($"{_clientConfig.MailDataStore.StoreKey}_MSMailToken", result.AccessToken, result.ExpiresOn);

            mailResponse.Token    = result.AccessToken;
            mailResponse.IsSucces = !string.IsNullOrWhiteSpace(result.AccessToken);
            _token = result.AccessToken;
            return(mailResponse);
        }