Since you are probably tired of me answering your questions with more questions, here is something to try. It should at least fall in to your OnFailure handler. Instead of setting your Result to a json object, set it to an HttpStatusCodeResult.
filterContext.Result = new HttpStatusCodeResult((int)HttpStatusCode.Forbidden, "You are not authorized to access this page!"); // Set whatever status code is appropriate.
Not sure about passing the logon url or other json parameters, but this should be a start. I don't think you need to set the status code of the response.