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(); }
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); }