Иван Афонин родился 20 апреля 1904 года в деревне Крешнево, Тверская область. Работал председателем сельсовета. В ноябре 1926 года призван в ряды Рабоче-Крестьянской Красной Армии и направлен красноармейцем в 26-й артиллерийский дивизион. В 1929 году окончил Борисоглебскую кавалерийскую школу в Санкт-Петербурге.
После окончания школы Афонин направлен в 51-й кавалерийский полк, где назначен на должность командира кавалерийского взвода, а затем - на должность командира взвода полковой школы. После окончания курсов переподготовки начсостава при Объединенной военной школе имени ВЦИК в Москве с октября 1932 года временно исполнял должность начальника 6-го отделения штаба 9-й кавалерийской дивизии. Позднее назначен на должность помощника командира отдельного кавалерийского эскадрона 51-й стрелковой дивизии.
В 1936 году, окончив Военную академию имени М. В. Фрунзе, Иван Афонин временно исполнял должность начальника оперативного отдела штаба 1-й армейской группы, находясь на которой, с июля по сентябрь 1939 года, принимал участие в боевых действиях на Халхин-Голе. С декабря являлся помощником начальника и исполняющим должность начальника специальной группы для особых поручений при командующем войсками Одесского военного округа.
В сентябре 1940 года Иван Михайлович стал старшим помощником инспектора пехоты этого округа. С февраля по март 1941 года состоял старшим адъютантом начальника Генерального штаба Рабоче-Крестьянской Красной Армии. Затем являлся командиром 469-го стрелкового полка 150-й стрелковой дивизии Одесского военного округа.
С первого дня Великой Отечественной войны Афонин находился на фронте, начав боевой путь 22 июня на реке Прут в Молдавии. Полк под его командованием принимал участие в ходе приграничного сражения на Южном фронте. Затем 9 сентября принял под свое командование 333-ю стрелковую дивизии в Северо-Кавказском военном округе. С января 1942 года дивизия вела тяжелые бои в составе 9-й армии на Южном фронте, участвовала в Барвенково-Лозовской наступательной операции. В апреле назначен начальником штаба 5-го кавалерийского корпуса на Южном и Юго-Западном фронтах. Участвовал в оборонительных боях в Донбассе.
В первую годовщину войны 22 июня Иван Афонин получил тяжелое ранение. Героическими усилиями шофера и санитаров его вывезли в тыл. В камышинском госпитале обнаружили в теле четыре осколка. Один из них, самый крупный, врезался через лопатку в правое легкое. Хирурги удалили этот кусок металла, а остальные, не представлявшие опасности, не тронули. Уже через месяц, почувствовав себя лучше, запросился на фронт.
В августе Афонин принял 300-ю стрелковую дивизию в Южно-Уральском военном округе. В октябре дивизия направлена на Сталинградский фронт, прибыла в район Камышина, включена в 5-ю ударную армию, переправилась через Волгу и заняла оборону по ее левому берегу, не допустив сюда немецкие части, не дав им перейти через реку. Во время этой обороны из состава дивизии выделен особый десантный батальон, который, захватив район Латошанки, потеснил немцев, вынудив их вывести с этого участка пехотную дивизию и свои танки. Когда группировка Паулюса оказалась окружена, дивизия полковника переправилась через Волгу в районе Светлый Яр, вышла к речке Мышкова и в ходе Котельниковской оборонительной операции встала на пути группы армий «Дон» Манштейна.
Советские пехотинцы противостояли немецким танкам, 19 декабря подбили и сожгли тридцать девять бронированных машин, а на следующий день - еще девятнадцать. Противник отказался от дальнейших попыток наступать и стал окапываться. С февраля 1943 года Иван Михайлович Афонин состоял в распоряжении Маршала Советского Союза Георгия Жукова для особо важных оперативных поручений, после чего выезжал в районы демянского выступа и Белгорода.
В апреле Иван Михайлович назначен на должность командира 18-го гвардейского стрелкового корпуса, который вскоре принимал участие в ходе Курской битвы и освобождении Левобережной Украины, а затем в Киевских оборонительной и наступательной операциях. В 1944 году корпус под командованием генерал-майора принимал участие в Житомирско-Бердичевской, Ровно-Луцкой, Проскуровско-Черновицкой, Львовско-Сандомирской, Восточно-Карпатской, Карпатско-Ужгородской и Будапештской наступательных операций, а также при освобождении городов Шепетовка, Изяслав, Монастыриска, Тлумач, Станислав.
Корпус Афонина отличился в сражении за Будапешт, которая началась 29 октября 1944 года. Впоследствии 11 января 1945 года назначен командующим Будапештской группой советских войск 2-го Украинского фронта. Эта группа успешно штурмовала левобережную часть Будапешта - Пешт и практически полностью освободила его. В плен взято до пятидесяти пяти тысяч немецких и венгерских солдат. В этом сражении 24 января получил тяжелое ранение. Врачам положение казалось безнадежным. Однако через три месяца генерал вновь вернулся на фронт.
Вернувшись, 24 марта 1945 года Иван Михайлович вновь принял командование своим корпусом в составе 46-й армии 2-го Украинского фронта. Корпус участвовал в Братиславско-Брновской и Пражской операциях. Из-под Вены корпус, переправившись через Дунай, от Братиславы совершил бросок через Малые Карпаты на реку Мораву, с ходу смял прикрытие врага и вышел к Кржелице. Заняв место в центре боевого построения 53-й армии, корпус получил задачу освободить город Брно, имевший стратегическое значение. Взятие Брно отрезало путь отхода гитлеровским войскам, застрявшим в Карпатах, и обеспечивало быстрое освобождение Праги.
Указом Президиума Верховного Совета СССР от 28 апреля 1945 года за образцовое командование стрелковым корпусом в боях против немецко-фашистских захватчиков и проявленные при этом личное мужество и героизм гвардии генерал-майору Афонину Ивану Михайловичу присвоено звание Героя Советского Союза.
О салюте Победы гвардейцы Афонина узнали во время сражения. Продолжали вести бои с гитлеровцами, отказавшимися сложить оружие. В день парада Победы на Красной площади генерал-лейтенант командовал сводным полком 2-го Украинского фронта.
В июле корпус передислоцирован на Дальний Восток, где вскоре принял участие в советско-японской войне в ходе Хингано-Мукденской наступательной операции. За участие в операции корпус награжден орденом Красного Знамени. Генерал Иван Михайлович Афонин с батальоном автоматчиков 19 августа на самолетах до подхода к городу соединений Забайкальского фронта неожиданно для противника приземлился на аэродроме Мукдена, где пленил императора Пу И вместе с его свитой, а также обеспечил успешное вхождение войск Р. Я. Малиновского в Мукден.
После окончания войны Иван Афонин продолжал командовать корпусом. В 1948 году окончил Военную академию Генерального штаба Вооруженных Сил. Затем назначен на должность начальника оперативного управления - заместителя начальника штаба Белорусского военного округа. В мае 1949 года стал помощником командующего 1-й Отдельной Краснознаменной армией, а в сентябре 1951 года - командиром 123-го стрелкового корпуса. В июне 1954 года занял должность первого заместителя командующего войсками Западно-Сибирского военного округа, а в ноябре 1956 года - командующего 14-й армией.
В мае 1960 года Афонин освобожден от занимаемой должности, после чего направлен на преподавательскую работу в Военную академию Генерального штаба Вооруженных Сил, где назначен на должность заместителя начальника, а затем - на должность старшего преподавателя кафедры тактики высших соединений. В июне 1968 года вышел в отставку.
Герой Советского Союза Иван Михайлович Афонин умер 16 января 1979 года в возрасте семидесяти четырех лет. Похоронен на Кунцевском кладбище в Москве.
Медаль «Золотая Звезда» (28.04.1945)
Два ордена Ленина (1944, 28.04.1945)
Четыре ордена Красного Знамени (29.09.1939, 27.08.1943, 8.09.1945, 5.11.1946)
Два ордена Суворова II степени (31.03.1943, 17.10.1943)
Орден Богдана Хмельницкого II степени (10.01.1944)
Орден Красной Звезды
Медали
Иностранные награды:
Орден Красного Знамени (МНР, 10.10.1939)
Иностранные медали
Почетный гражданин города Ужгород