public async Task CreateAsync(AuthenticationTokenCreateContext context)
        {
            var clientId = context.Ticket.Properties.Dictionary["as:client_id"];

            if (string.IsNullOrEmpty(clientId))
            {
                return;
            }

            var refreshTokenId = Guid.NewGuid().ToString("n");
            var refreshTokenLifeTime = context.OwinContext.Get<string>("as:clientRefreshTokenLifeTime");
            var token = new DataLayer.Entities.User.RefreshTokens()
            {
                refreshTokenId = SharedServices.HashingService.GetHash(refreshTokenId),
                clientId = clientId,
                subject = context.Ticket.Identity.Name,
                issuedUTC = DateTime.UtcNow,
                expiredUTC = DateTime.UtcNow.AddMinutes(Convert.ToDouble(refreshTokenLifeTime))
            };

            context.Ticket.Properties.IssuedUtc = token.issuedUTC;
            context.Ticket.Properties.ExpiresUtc = token.expiredUTC;

            token.protectedTicket = context.SerializeTicket();

            var tokenObj = new BusinessLogic.Identity.RefreshTokens();
            var result = await tokenObj.Insert(token);

            if (result)
            {
                context.SetToken(refreshTokenId);
            }
        }
        public async Task ReceiveAsync(AuthenticationTokenReceiveContext context)
        {
            var allowedOrigin = context.OwinContext.Get<string>("as:clientAllowedOrigin");
            context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { allowedOrigin });

            string hasedTokenId = SharedServices.HashingService.GetHash(context.Token);

            var tokenObj = new BusinessLogic.Identity.RefreshTokens();
            var refreshToken = await tokenObj.GetByID(hasedTokenId);

            if (refreshToken != null)
            {
                context.DeserializeTicket(refreshToken.protectedTicket);
                var result = await tokenObj.Delete(hasedTokenId);
            }
        }