public async static Task <TResult> CreateWithImplicitAsync <TResult>(string username, string password,
                                                                             Func <string, string, TResult> success, Func <string, TResult> failure)
        {
            var providerId = CloudConfigurationManager.GetSetting("BlackbarLabs.Security.CredentialProvider.Implicit.provider").ToUri();

            var credentialImplicit = new Credentials.Credential
            {
                Method   = CredentialValidationMethodTypes.Implicit,
                Provider = providerId,
                Token    = password,
                UserId   = username,
            };

            var session = new Session()
            {
                Id          = Guid.NewGuid(),
                Credentials = credentialImplicit,
            };

            return(await FetchSessionTokenAsync(session,
                                                (headerName, headerValue) => success(headerName, headerValue),
                                                (whyFailed) => failure(whyFailed)));
        }
        public async static Task <TResult> CreateWithVoucherAsync <TResult>(Guid authId, string authToken,
                                                                            Func <string, string, TResult> success, Func <string, TResult> failure)
        {
            var providerId = CloudConfigurationManager.GetSetting("BlackbarLabs.Security.CredentialProvider.Voucher.provider").ToUri();

            var credentialVoucher = new Credentials.Credential
            {
                Method   = CredentialValidationMethodTypes.Voucher,
                Provider = providerId,
                Token    = authToken,
                UserId   = authId.ToString("N"),
            };

            var session = new Session()
            {
                Id          = Guid.NewGuid(),
                Credentials = credentialVoucher,
            };

            return(await FetchSessionTokenAsync(session,
                                                (headerName, headerValue) => success(headerName, headerValue),
                                                (whyFailed) => failure(whyFailed)));
        }