Ejemplo n.º 1
0
        /// <summary>
        /// Gets the claim challenge from HTTP header.
        /// Used, for example, for CA auth context.
        /// </summary>
        /// <param name="httpResponseHeaders">The HTTP response headers.</param>
        /// <param name="scheme">Authentication scheme. Default is Bearer.</param>
        /// <returns></returns>
        public static string GetClaimChallengeFromResponseHeaders(
            HttpResponseHeaders httpResponseHeaders,
            string scheme = "Bearer")
        {
            WwwAuthenticateParameters parameters = CreateFromResponseHeaders(
                httpResponseHeaders,
                scheme);

            try
            {
                // read the header and checks if it contains an error with insufficient_claims value.
                if (null != parameters.Error && "insufficient_claims" == parameters.Error)
                {
                    if (null != parameters.Claims)
                    {
                        return(parameters.Claims);
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return(null);
        }
        /// <summary>
        /// Gets the claim challenge from HTTP header.
        /// Used, for example, for CA auth context.
        /// </summary>
        /// <param name="httpResponseHeaders">The HTTP response headers.</param>
        /// <param name="scheme">Authentication scheme. Default is Bearer.</param>
        /// <returns></returns>
        public static string GetClaimChallengeFromResponseHeaders(
            HttpResponseHeaders httpResponseHeaders,
            string scheme = "Bearer")
        {
            WwwAuthenticateParameters parameters = CreateFromResponseHeaders(
                httpResponseHeaders,
                scheme);

            // read the header and checks if it contains an error with insufficient_claims value.
            if (parameters.Claims != null &&
                string.Equals(parameters.Error, "insufficient_claims", StringComparison.OrdinalIgnoreCase))
            {
                return(parameters.Claims);
            }

            return(null);
        }
        internal static WwwAuthenticateParameters CreateWwwAuthenticateParameters(IDictionary <string, string> values)
        {
            WwwAuthenticateParameters wwwAuthenticateParameters = new WwwAuthenticateParameters
            {
                RawParameters = values
            };

            string value;

            if (values.TryGetValue("authorization_uri", out value))
            {
                wwwAuthenticateParameters.Authority = value.Replace("/oauth2/authorize", string.Empty);
            }

            if (string.IsNullOrEmpty(wwwAuthenticateParameters.Authority))
            {
                if (values.TryGetValue("authorization", out value))
                {
                    wwwAuthenticateParameters.Authority = value.Replace("/oauth2/authorize", string.Empty);
                }
            }

            if (string.IsNullOrEmpty(wwwAuthenticateParameters.Authority))
            {
                if (values.TryGetValue("authority", out value))
                {
                    wwwAuthenticateParameters.Authority = value.TrimEnd('/');
                }
            }

            if (values.TryGetValue("claims", out value))
            {
                wwwAuthenticateParameters.Claims = GetJsonFragment(value);
            }

            if (values.TryGetValue("error", out value))
            {
                wwwAuthenticateParameters.Error = value;
            }

            return(wwwAuthenticateParameters);
        }