Родился в д. Крешнево Весьегонского района Тверской губернии.
В армии — с 1926 года, служил красноармейцем в 26-м артиллерийском дивизионе 2-й артиллерийской дивизии. Окончил Ленинградскую кавалерийскую школу и Военную академию имени М. В. Фрунзе, служил в 9-й кавдивизии. Член КПСС с 1928 года. Участвовал в боях на Халхин-Голе. В годы Великой Отечественной войны командовал 469-м стрелковым полком, 333-й и 300-й стрелковыми дивизиями, 18-м гвардейским Станиславско — Будапештским Краснознамённым стрелковым корпусом. Дважды тяжело ранен и контужен. После войны генерал-лейтенант И. М. Афонин окончил Академию генштаба, занимал ответственные командные должности, преподавал в Академии генштаба.
Встретил войну 22 июня 1941 года на реке Прут в Молдавии, южнее Лоево. В сентябре 1941 года Афонин принял под своё командование стрелковую дивизию, которая вела тяжёлые бои на Южном фронте. Весной 1942 назначен начальником штаба 5-го кавалерийского корпуса. 22 июня 1942 года в бою на Северском Донце тяжело ранен. В камышинском госпитале обнаружили в теле четыре осколка.
В августе сорок второго он принял другую дивизию — 300-ю, направленную на Сталинградский фронт. Дивизия прибыла в район Камышина, переправилась через Волгу и заняла оборону по её левому берегу, не допустив сюда немецкие части, не дав им перейти через реку. Во время этой обороны из состава дивизии был выделен особый десантный батальон, который, захватив район Латошанки, потеснил немцев, вынудив их вывести с этого участка пехотную дивизию и свои танки. Когда группировка Паулюса была окружена, дивизия Афонина переправилась через Волгу в районе Светлого Яра, вышла к речке Мышкова (левый приток Дона) и встала на пути наступающей группы Манштейна.
В феврале 1943 года 300-я дивизия преобразована в 87-ю гвардейскую стрелковую дивизию. Афонину присвоили звание генерал-майора и вызвали в Москву, где Михаил Калинин вручил ему орден Суворова II степени, а в Генеральном штабе объявили о назначении командиром 18-го гвардейского стрелкового корпуса.
Корпус Афонина сражался на Курской дуге, форсировал Днепр, успешно продвигался с боями по правобережной Украине и вышел к Карпатам. За расширение плацдарма за Днепром Афонин награждён вторым орденом Суворова. В одном из боёв Ивана Михайловича тяжело контузило.
12 апреля 1944 года Афонин собственноручно расстрелял начальника разведки 237-й стрелковой дивизии майора Андреева. По этому поводу начальник Главного управления кадров Красной Армии генерал-полковник Ф. И. Голиков писал секретарю ЦК ВКП(б) Г. М. Маленкову 30 апреля 1944 года:
Сталину же Голиков сообщал днём раньше, 29 апреля:
18-й корпус отличился в сражении за Будапешт. Генерала Афонина назначили командующим Будапештской группой советских войск 2 Украинского фронта. 24 января 1945 года во время боёв за Будапешт Афонин получил тяжёлое ранение.
Уже 24 марта Афонин вновь прибыл в свой корпус. 18 гвардейский двигался по западной Венгрии и Австрии, освобождал Вену. Из-под Вены корпус, переправившись через Дунай, от Братиславы совершил бросок через Малые Карпаты на реку Мораву, с ходу смял прикрытие врага и вышел к Кржелице. Участвовал во взятии Брно.
Войска Афонина участвовали в преследовании группировки фельдмаршала Шёрнера, который отказался сложить оружие после объявления капитуляции Германии и пытался вывести свои войска в расположение американцев. Лишь 14 мая они вышли в район юго-западнее Праги, где и закончили войну.
В день парада Победы на Красной площади генерал-лейтенант И. М. Афонин командовал сводным полком 2-го Украинского фронта.
В августе 1945 года 18-й гвардейский Станиславско-Будапештский стрелковый корпус в составе войск Забайкальского фронта прошёл через Большой Хинган, преодолев с боями почти 1200 километров. За операцию корпус был награждён орденом Красного Знамени. 19 августа 1945 года генерал И. Афонин с батальоном автоматчиков на самолётах (до подхода к городу соединений Забайкальского фронта) неожиданно для противника приземлился на аэродроме Мукдена, пленил императора Пу И с его свитой, обеспечил успешное вхождение войск Р. Я. Малиновского в Мукден.
После войны Афонин был первым заместителем командующего Сибирским военным округом, избирался в партийные и советские органы, был делегатом XIX съезда партии. В 1965 году вышел в отставку. Работал в центральном правлении Общества советско-венгерской дружбы, в Советском комитете ветеранов войны. Почётный гражданин Ужгорода.