/// <summary> /// Gets the current set of accounts in the cache by creating a new public client, and /// deserializing the cache into a temporary object. /// </summary> private static async Task <HashSet <string> > GetAccountIdentifiersAsync( StorageCreationProperties storageCreationProperties, TraceSourceLogger logger) { var accountIdentifiers = new HashSet <string>(); if (File.Exists(storageCreationProperties.CacheFilePath)) { var pca = PublicClientApplicationBuilder.Create(storageCreationProperties.ClientId).Build(); pca.UserTokenCache.SetBeforeAccess((args) => { MsalCacheStorage tempCache = null; try { tempCache = MsalCacheStorage.Create(storageCreationProperties, s_staticLogger.Value.Source); // We're using ReadData here so that decryption is handled within the store. var data = tempCache.ReadData(); args.TokenCache.DeserializeMsalV3(data); } catch (Exception e) { logger.LogError("An error occured while reading the token cache: " + e); logger.LogError("Deleting the token cache as it might be corrupt."); tempCache.Clear(); } }); var accounts = await pca.GetAccountsAsync().ConfigureAwait(false); foreach (var account in accounts) { accountIdentifiers.Add(account.HomeAccountId.Identifier); } } return(accountIdentifiers); }
/// <summary> /// Clears the token store /// </summary> public void Clear() { _store.Clear(); }