private static async Task SaveAuthToken(AuthState authState, OAuthResult authResult, FacebookUserProfile userProfile)
        {
            using (var db = new AddInContext())
            {
                var existingToken =
                    await
                    db.SessionTokens.FirstOrDefaultAsync(
                        t => t.Provider == Settings.FacebookAuthority && t.Id == authState.stateKey);

                if (existingToken != null)
                {
                    db.SessionTokens.Remove(existingToken);
                }

                var token = new SessionToken()
                {
                    Id          = authState.stateKey,
                    CreatedOn   = DateTime.Now,
                    AccessToken = authResult.access_token,
                    Provider    = Settings.FacebookAuthority,
                    Username    = userProfile.id,
                };
                db.SessionTokens.Add(token);
                await db.SaveChangesAsync();
            }
        }
        private static async Task SaveAuthToken(AuthState authState, AuthenticationResult authResult)
        {
            var    idToken       = SessionToken.ParseJwtToken(authResult.IdToken);
            string username      = null;
            var    userNameClaim = idToken.Claims.FirstOrDefault(x => x.Type == "upn");

            if (userNameClaim != null)
            {
                username = userNameClaim.Value;
            }

            using (var db = new AddInContext())
            {
                var existingToken =
                    await
                    db.SessionTokens.FirstOrDefaultAsync(
                        t => t.Provider == Settings.AzureADAuthority && t.Id == authState.stateKey);

                if (existingToken != null)
                {
                    db.SessionTokens.Remove(existingToken);
                }
                var token = new SessionToken()
                {
                    Id          = authState.stateKey,
                    CreatedOn   = DateTime.Now,
                    AccessToken = authResult.AccessToken,
                    Provider    = Settings.AzureADAuthority,
                    Username    = username
                };
                db.SessionTokens.Add(token);
                await db.SaveChangesAsync();
            }
        }
        private static async Task SaveAuthToken(AuthState authState, OAuthResult authResult)
        {
            using (var db = new AddInContext())
            {
                var existingToken =
                    await
                    db.SessionTokens.FirstOrDefaultAsync(
                        t => t.Provider == Settings.GoogleAuthority && t.Id == authState.stateKey);

                if (existingToken != null)
                {
                    db.SessionTokens.Remove(existingToken);
                }
                string username   = null;
                var    jwt        = SessionToken.ParseJwtToken(authResult.id_token);
                var    emailClaim = jwt.Claims.FirstOrDefault(c => c.Type == "email");
                if (emailClaim != null)
                {
                    username = emailClaim.Value;
                }

                var token = new SessionToken()
                {
                    Id          = authState.stateKey,
                    CreatedOn   = DateTime.Now,
                    AccessToken = authResult.access_token,
                    Provider    = Settings.GoogleAuthority,
                    Username    = username,
                };
                db.SessionTokens.Add(token);
                await db.SaveChangesAsync();
            }
        }