public StatefulAuthenticationOptions(StatefulTokenProvider tokenProvider) : base("Bearer")
 {
     
     if (tokenProvider == null)
         throw new ArgumentNullException("repository");
     TokenProvider = tokenProvider;
 }
        /// <summary>
        /// Adds stateful token processing to OWIN application pipeline; Options with token repository must be set.
        /// </summary>
        /// <param name="userFromToken">Async function to retrieve unique username from token</param>
        public static IAppBuilder UseStatefulAuthentication(this IAppBuilder app, Func<string, Task<string>> userFromToken)
        {
            if (app == null)
                throw new ArgumentNullException("app");
            if (userFromToken == null)
                throw new ArgumentNullException("userFromToken");

            var repo = new StatefulTokenProvider(userFromToken);
            var options = new StatefulAuthenticationOptions(repo);
            app.Use(typeof(StatefulAuthenticationMiddleware), app, options);
            return app;
        }