/// <summary> /// Save a refresh token /// Returns the refresh token id /// </summary> /// <param name="refreshToken"></param> /// <returns>Refresh token id</returns> public async Task <String> SaveRefreshTokenAsync(RefreshTokenModel refreshToken) { var refreshTokenId = Guid.NewGuid().ToString("n"); _context.RefreshTokens.Add(new RefreshTokens { ClientId = "notneeded", ExpiresUtc = refreshToken.ExpiresUtc, IssuedUtc = refreshToken.IssuedUtc, ProtectedTicket = refreshToken.AccessToken, Subject = refreshToken.Subject, TokenIdHash = CryptoMethods.GetSHA512Hash(refreshTokenId) }); await _context.SaveChangesAsync(); return(refreshTokenId); }
/// <summary> /// Remove a token /// </summary> /// <param name="refreshTokenId"></param> /// <returns></returns> public async Task RemoveTokenAsync(String refreshTokenId) { using (var transaction = await _context.Database.BeginTransactionAsync()) { var token = await _context.RefreshTokens.SingleOrDefaultAsync(o => o.TokenIdHash == CryptoMethods.GetSHA512Hash(refreshTokenId)); if (token != null) { _context.RefreshTokens.Remove(token); await _context.SaveChangesAsync(); transaction.Commit(); } } }
/// <summary> /// Get a /// </summary> /// <param name="refreshTokenId"></param> /// <returns></returns> public async Task <RefreshTokenModel> GetRefreshTokenAsync(String refreshTokenId) { var token = await _context.RefreshTokens.SingleOrDefaultAsync(o => o.TokenIdHash == CryptoMethods.GetSHA512Hash(refreshTokenId) && o.ExpiresUtc >= DateTime.UtcNow); return(token != null ? new RefreshTokenModel { ExpiresUtc = token.ExpiresUtc, IssuedUtc = token.IssuedUtc, AccessToken = token.ProtectedTicket, Subject = token.Subject } : null); }