/// <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); }
/// <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); }