/// <summary>
        /// Initializes a module and prepares it to handle requests.
        /// </summary>
        /// <param name="context">
        /// An <see cref="HttpApplication" /> that provides access to the methods,
        /// properties, and events common to all application objects within an ASP.NET application
        /// </param>
        /// <exception cref="ArgumentNullException">
        /// <paramref name="context"/> is <see langword="null"/>.
        /// </exception>
        /// <exception cref="InvalidOperationException">
        /// <paramref name="context"/> does not implement <see cref="IJwtValidationParametersProvider"/>.
        /// </exception>
        public void Init(HttpApplication context)
        {
            context.AssertNotNull("context");

            var app = context as IJwtValidationParametersProvider;

            if (app == null)
            {
                throw new InvalidOperationException(InvariantStrings.InvalidHttpApplication);
            }

            this.tokenValidationParameters = app.TokenValidationParameters;

            context.AuthenticateRequest += this.Application_AuthenticateRequest;
        }