public virtual async Task <IList <Claim> > GetClaimsAsync(TUser user)
        {
            Contract.Requires(user != null, "Given user must be a non-null reference");
            Contract.Ensures(Contract.Result <Task <IList <Claim> > >() != null);

            // for example: /users/{userId}/claims
            HttpResponseMessage response = await HttpClient.GetAsync
                                           (
                UserClaimStoreResourceUri.Replace("{userId}", ((IIdentityUser)user).Id)
                                           );

            return(await response.Content.ReadAsAsync <IList <Claim> >());
        }
        public virtual Task AddClaimAsync(TUser user, Claim claim)
        {
            Contract.Requires(user != null, "Given user must be a non-null reference");
            Contract.Requires(claim != null, "Given claim must be a non-null reference");
            Contract.Ensures(Contract.Result <Task>() != null);

            // for example: /users/{userId}/claims
            return(HttpClient.PostAsJsonAsync
                   (
                       UserClaimStoreResourceUri.Replace("{userId}", ((IIdentityUser)user).Id),
                       claim
                   ));
        }
        public virtual Task RemoveClaimAsync(TUser user, Claim claim)
        {
            Contract.Requires(user != null, "Given user must be a non-null reference");
            Contract.Requires(claim != null, "Given claim must be a non-null reference");
            Contract.Ensures(Contract.Result <Task>() != null);

            // for example: /users/{userId}/logins/{providerKey}
            HttpRequestMessage request = new HttpRequestMessage
                                         (
                HttpMethod.Delete,
                $"{UserClaimStoreResourceUri.Replace("{userId}", ((IIdentityUser)user).Id)}/{claim.Type}"
                                         );

            return(HttpClient.SendAsync(request));
        }