예제 #1
0
        private async Task ReadCredentialMetadata(HttpClient client, HttpRequestMessage message, CallCredentials credentials)
        {
            var configurator = new CallCredentialsConfigurator();

            credentials.InternalPopulateConfiguration(configurator, null);

            if (configurator.Interceptor != null)
            {
                var authInterceptorContext = new AuthInterceptorContext(client.BaseAddress.OriginalString, Method.FullName);
                var metadata = new Metadata();
                await configurator.Interceptor(authInterceptorContext, metadata).ConfigureAwait(false);

                foreach (var entry in metadata)
                {
                    AddHeader(message.Headers, entry);
                }
            }

            if (configurator.Credentials != null)
            {
                foreach (var c in configurator.Credentials)
                {
                    await ReadCredentialMetadata(client, message, c).ConfigureAwait(false);
                }
            }
        }
        /// <summary>
        /// Creates native object for the credentials.
        /// </summary>
        /// <returns>The native credentials.</returns>
        public static CallCredentialsSafeHandle ToNativeCredentials(this CallCredentials credentials)
        {
            var configurator = new DefaultCallCredentialsConfigurator();

            credentials.InternalPopulateConfiguration(configurator, credentials);
            return(configurator.NativeCredentials);
        }
        /// <summary>
        /// Returns the async auth interceptor derived from the given channel credentials, or null
        /// if the channel credentials don't involve an interceptor.
        /// </summary>
        /// <param name="credentials">The channel credentials to convert.</param>
        internal static AsyncAuthInterceptor ToAsyncAuthInterceptor(this CallCredentials credentials)
        {
            var configurator = new RestCallCredentialsConfigurator();

            credentials.InternalPopulateConfiguration(configurator, null);
            return(configurator.Interceptor);
        }