public AuthenticationResponse(WsCredential credential, AuthenticationChallenge challenge)
 {
     _userName = credential.UserName;
     _password = credential.Password;
     _scheme   = challenge.Scheme;
     _realm    = challenge.Realm;
     if (_scheme == "Digest")
     {
         initForDigest(credential, challenge);
     }
 }
        private void initForDigest(WsCredential credential, AuthenticationChallenge challenge)
        {
            _nonce     = challenge.Nonce;
            _method    = "GET";
            _uri       = credential.Domain;
            _algorithm = challenge.Algorithm;
            _opaque    = challenge.Opaque;
            foreach (var qop in challenge.Qop.Split(','))
            {
                if (qop.Trim().ToLower() == "auth")
                {
                    _qop = "auth";
                    _nc  = "00000001";
                    break;
                }
            }

            _cnonce   = createNonceValue();
            _response = createRequestDigest();
        }
Ejemplo n.º 3
0
        public static AuthenticationChallenge Parse(string challenge)
        {
            var authChallenge = new AuthenticationChallenge();

            if (challenge.StartsWith("basic", StringComparison.OrdinalIgnoreCase))
            {
                authChallenge.Scheme = "Basic";
                authChallenge.Realm  = challenge.Substring(6).GetValueInternal("=").Trim('"');

                return(authChallenge);
            }

            foreach (var p in challenge.SplitHeaderValue(','))
            {
                var param = p.Trim();
                if (param.StartsWith("digest", StringComparison.OrdinalIgnoreCase))
                {
                    authChallenge.Scheme = "Digest";
                    authChallenge.Realm  = param.Substring(7).GetValueInternal("=").Trim('"');

                    continue;
                }

                var value = param.GetValueInternal("=").Trim('"');
                if (param.StartsWith("domain", StringComparison.OrdinalIgnoreCase))
                {
                    authChallenge.Domain = value;
                    continue;
                }

                if (param.StartsWith("nonce", StringComparison.OrdinalIgnoreCase))
                {
                    authChallenge.Nonce = value;
                    continue;
                }

                if (param.StartsWith("opaque", StringComparison.OrdinalIgnoreCase))
                {
                    authChallenge.Opaque = value;
                    continue;
                }

                if (param.StartsWith("stale", StringComparison.OrdinalIgnoreCase))
                {
                    authChallenge.Stale = value;
                    continue;
                }

                if (param.StartsWith("algorithm", StringComparison.OrdinalIgnoreCase))
                {
                    authChallenge.Algorithm = value;
                    continue;
                }

                if (param.StartsWith("qop", StringComparison.OrdinalIgnoreCase))
                {
                    authChallenge.Qop = value;
                }
            }

            return(authChallenge);
        }