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); }
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)); }
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); } //} }