Exemplo n.º 1
0
        private async Task <string> StoreRefreshToken(IIdentity identity)
        {
            var refreshTokenId = Guid.NewGuid().ToString("n");
            var refreshToken   = new RefreshToken
            {
                Id          = _crypto.Hash(refreshTokenId),
                ClientId    = _audience.ClientId,
                Subject     = identity.Name,
                IssuedUtc   = DateTime.UtcNow,
                ExpiresUtc  = DateTime.UtcNow.AddMinutes(Convert.ToDouble(_audience.RefreshTokenLifeTime)),
                ObjectState = ObjectState.Added
            };

            // create metadata to pass on to refresh token provider
            var props = new AuthenticationProperties(new Dictionary <string, string>
            {
                { "as:client_id", _audience.ClientId },
                { "userName", identity.Name }
            })
            {
                IssuedUtc  = refreshToken.IssuedUtc,
                ExpiresUtc = refreshToken.ExpiresUtc
            };

            var ticket      = new AuthenticationTicket(new ClaimsPrincipal(identity), props, JwtBearerDefaults.AuthenticationScheme);
            var ticketBytes = new TicketSerializer().Serialize(ticket);

            refreshToken.ProtectedTicket = Convert.ToBase64String(ticketBytes);

            await _authService.AddRefreshToken(refreshToken);

            return(refreshTokenId);
        }
Exemplo n.º 2
0
        public override Task SerializeRefreshToken(SerializeRefreshTokenContext context)
        {
            _authService = (IAuthService)context.HttpContext.RequestServices.GetService(typeof(IAuthService));
            var clientid = string.Empty;

            context.Ticket.Properties.Items.TryGetValue("client_id", out clientid);

            if (string.IsNullOrEmpty(clientid))
            {
                return(Task.FromResult(0));
            }

            var refreshTokenId = Guid.NewGuid().ToString("n");

            Client client = _authService.FindClient(clientid);

            var refreshTokenLifeTime = client.RefreshTokenLifeTime;

            var token = new RefreshToken()
            {
                Id         = refreshTokenId,
                ClientId   = clientid,
                Subject    = context.Ticket.Principal.Identity.Name,
                IssuedUtc  = DateTime.Now,
                ExpiresUtc = DateTime.Now.AddMinutes(Convert.ToDouble(refreshTokenLifeTime))
            };

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


            token.ProtectedTicket = context.DataFormat.Protect(context.Ticket);

            var result = _authService.AddRefreshToken(token);

            if (result)
            {
                context.RefreshToken = refreshTokenId;
            }

            return(Task.FromResult <object>(null));
        }
Exemplo n.º 3
0
        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");

            //using (AuthService _repo = new AuthService(_configurationManager))
            //{
            var refreshTokenLifeTime = context.OwinContext.Get <string>("as:clientRefreshTokenLifeTime");

            var token = new RefreshToken()
            {
                Id         = Helper.GetHash(refreshTokenId),
                ClientId   = clientid,
                Subject    = context.Ticket.Identity.Name,
                IssuedUtc  = DateTime.UtcNow,
                ExpiresUtc = DateTime.UtcNow.AddMinutes(Convert.ToDouble(refreshTokenLifeTime))
            };

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

            token.ProtectedTicket = context.SerializeTicket();

            var result = await _authService.AddRefreshToken(token);

            if (result)
            {
                context.SetToken(refreshTokenId);
            }

            //}
        }