private bool DoDigestAuth(HttpListenerContext context) { var client = context.Request.RemoteEndPoint.ToString().Split(':')[0]; var parsedHeader = new DigestAuthHeaderValue(context); if (_InUseNonces.ContainsKey(client) && _InUseNonces[client].Item1 == parsedHeader.Nonce) { int lastNc = _InUseNonces[client].Item2; if (lastNc >= parsedHeader.Nc) { // possible replay attack return(false); } } else if (!_RecentNonces.Contains(parsedHeader.Nonce)) { return(false); // Stale / non-issued nonce } _InUseNonces[client] = Tuple.Create(parsedHeader.Nonce, parsedHeader.Nc); _RecentNonces.Remove(parsedHeader.Nonce); return(ValidateUser(parsedHeader)); }
protected bool ValidateUser(DigestAuthHeaderValue headerValue) { return headerValue.ValidateAgainst(this); }
private bool DoDigestAuth(HttpListenerContext context) { var client = context.Request.RemoteEndPoint.ToString().Split(':')[0]; var parsedHeader = new DigestAuthHeaderValue(context); if (_InUseNonces.ContainsKey(client) && _InUseNonces[client].Item1 == parsedHeader.Nonce) { int lastNc = _InUseNonces[client].Item2; if (lastNc >= parsedHeader.Nc) { // possible replay attack return false; } } else if(!_RecentNonces.Contains(parsedHeader.Nonce)){ return false; // Stale / non-issued nonce } _InUseNonces[client] = Tuple.Create(parsedHeader.Nonce, parsedHeader.Nc); _RecentNonces.Remove(parsedHeader.Nonce); return ValidateUser(parsedHeader); }