W 2009 prezydent Lech Kaczyński nadał mu tytuł profesora nauk humanistycznych.

W 1989 jako asystent stażysta został nauczycielem akademickim Instytutu Nauk Politycznych i Stosunków Międzynarodowych Uniwersytetu Jagiellońskiego, gdzie był kolejno asystentem, adiunktem i profesorem nadzwyczajnym. W latach 2011–2014 był kierownikiem Katedry Współczesnej Polityki Polskiej UJ. W 2014 został profesorem zwyczajnym w Instytucie Politologii Uniwersytetu Kardynała Stefana Wyszyńskiego. W latach 2018–2019 był kierownikiem Katedry Instytucji i Zachowań Politycznych, a w następnym roku akademickim przeszedł do pracy w Instytucie Nauk Historycznych UKSW. W 2015 został też członkiem Rady Naukowej Instytutu Studiów Politycznych PAN w Warszawie.

We wrześniu 2000 rozpoczął pracę w Biurze Edukacji Publicznej IPN na stanowisku naczelnika Wydziału Badań Naukowych, Dokumentacji i Zbiorów Bibliotecznych. Od lutego 2006 do kwietnia 2010 był doradcą prezesa IPN Janusza Kurtyki. W 2011 został wybrany przez Sejm w skład nowo powołanej Rady IPN, od 2015 pełnił funkcję jej przewodniczącego. Organ ten został zniesiony nowelizacją ustawy o IPN w 2016.