public async Task ValidateAsync(CookieValidatePrincipalContext context)
        {
            var currentUtc = DateTimeOffset.UtcNow;

            if (context.Options != null && _clock != null)
            {
                currentUtc = _clock.UtcNow;
            }

            var issuedUtc = context.Properties.IssuedUtc;
            var validate  = (issuedUtc == null);

            if (issuedUtc != null)
            {
                var timeElapsed = currentUtc.Subtract(issuedUtc.Value);
                validate = timeElapsed > _options.SecurityStampValidationInterval;
            }
            if (validate)
            {
                var signIn = await FindSignInWithValidSecurityStampAsync(context.Principal);

                if (signIn != null)
                {
                    var newPrincipal = await _claimsPrincipalFactory.CreateAsync(signIn);

                    if (_options.OnSecurityStampRefreshingPrincipal != null)
                    {
                        var replaceContext = new SecurityStampPrincipalContext
                        {
                            CurrentPrincipal = context.Principal,
                            NewPrincipal     = newPrincipal
                        };

                        await _options.OnSecurityStampRefreshingPrincipal(replaceContext);

                        newPrincipal = replaceContext.NewPrincipal;
                    }
                }
                else
                {
                    context.RejectPrincipal();
                    await _signInManager.SignOutAsync();
                }
            }
        }