void AfterAccessNotification(TokenCacheNotificationArgs args)
        {
            if (this.HasStateChanged)
            {
                var cacheBits = MachineKey.Protect(this.Serialize(), "ADALTableCache");

                Cache = new TokenEntity(userId, cacheBits, DateTime.UtcNow);
                _repository.InsertOrReplace(Cache);

                this.HasStateChanged = false;
            }
        }
        void BeforeAccessNotification(TokenCacheNotificationArgs args)
        {
            var latestToken = _repository.GetAllTokensForUser(userId)
                              .OrderByDescending(a => a.LastWrite)
                              .FirstOrDefault();

            if (Cache == null || (latestToken != null && Cache.LastWrite < latestToken.LastWrite))
            {
                Cache = latestToken;
            }

            this.Deserialize((Cache == null) ? null : MachineKey.Unprotect(Cache.CacheBits, "ADALTableCache"));
        }
        public void InsertOrReplace(TokenEntity tokenEntity)
        {
            var tableOp = TableOperation.InsertOrReplace(tokenEntity);

            _cloudTable.Execute(tableOp);
        }
        public void Delete(TokenEntity tokenEntity)
        {
            var tableOp = TableOperation.Delete(tokenEntity);

            _cloudTable.Execute(tableOp);
        }