public TokenProviderMiddleware(IHttpContextAccessor httpContextAccessor, ILoggerFactory DepLoggerFactory, IRepositoryWrapper repository)
        {
            _httpContextAccessor = httpContextAccessor;
            _repository          = repository;
            var requestPath = _httpContextAccessor.HttpContext.Request.Path.ToString();

            Log._logger         = DepLoggerFactory.CreateLogger(requestPath);
            _serializerSettings = new JsonSerializerSettings
            {
                Formatting = Formatting.Indented
            };

            var      appsettingbuilder = new ConfigurationBuilder().AddJsonFile("appsettings.json");
            var      Configuration     = appsettingbuilder.Build();
            double   expiretimespan    = Convert.ToDouble(Configuration.GetSection("TokenAuthentication:TokenExpire").Value);
            TimeSpan expiration        = TimeSpan.FromMinutes(expiretimespan);
            var      signingKey        = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(Configuration.GetSection("TokenAuthentication:SecretKey").Value));

            _options = new TokenProviderOptions
            {
                Path               = Configuration.GetSection("TokenAuthentication:TokenPath").Value,
                Audience           = Configuration.GetSection("TokenAuthentication:Audience").Value,
                Issuer             = Configuration.GetSection("TokenAuthentication:Issuer").Value,
                SigningCredentials = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256),
                IdentityResolver   = GetIdentity,
                Expiration         = expiration
            };
        }
        public TokenProviderMiddleware(
            RequestDelegate next,
            IOptions <TokenProviderOptions> options)
        {
            _next = next;

            _options = options.Value;
            ThrowIfInvalidOptions(_options);

            _serializerSettings = new JsonSerializerSettings
            {
                Formatting = Formatting.Indented
            };
        }
        private static void ThrowIfInvalidOptions(TokenProviderOptions options)
        {
            if (string.IsNullOrEmpty(options.Path))
            {
                throw new ArgumentNullException(nameof(TokenProviderOptions.Path));
            }

            if (string.IsNullOrEmpty(options.Issuer))
            {
                throw new ArgumentNullException(nameof(TokenProviderOptions.Issuer));
            }

            if (string.IsNullOrEmpty(options.Audience))
            {
                throw new ArgumentNullException(nameof(TokenProviderOptions.Audience));
            }

            if (options.Expiration == TimeSpan.Zero)
            {
                throw new ArgumentException("Must be a non-zero TimeSpan.", nameof(TokenProviderOptions.Expiration));
            }

            if (options.IdentityResolver == null)
            {
                throw new ArgumentNullException(nameof(TokenProviderOptions.IdentityResolver));
            }

            if (options.SigningCredentials == null)
            {
                throw new ArgumentNullException(nameof(TokenProviderOptions.SigningCredentials));
            }

            if (options.NonceGenerator == null)
            {
                throw new ArgumentNullException(nameof(TokenProviderOptions.NonceGenerator));
            }
        }