김윤후의 가계에 대해서는 자세히 알려진 바가 없다.
김윤후는 승려 출신으로 백현원(白峴院)에 살았는데, 1232년(고종 19)에 몽골군이 침입하자 처인성(處仁城)으로 피난하였다. 이때 몽골군의 장군 살리타이〔撒禮塔, 살리타〕를 활로 쏘아 죽였다. 이 공로로 상장군(上將軍, 정3품)에 임명되었으나 굳이 사양하여 섭랑장(攝郎將, 종6품)에 보임되었다. 이런 김윤후의 공적을 조선 후기 안정복(安鼎福)과 정약용(丁若鏞)은 "백현원의 승려가 처인성 전투의 승리로 무반직을 받아 환속해 김윤후라는 이름으로 대몽항쟁의 일선에 나섰다."라고 칭송하였다.
이후 1253년(고종 40)에 충주산성 방호별감(忠州山城防護別監)이 되어, 충주성 전투에서 몽골군과 맞서게 되었다. 그때 몽골군이 충주성을 포위한 지 70여 일이 되어 군량이 거의 바닥났다. 김윤후가 괴로워하는 군사들을 북돋우며 말하기를, “만약 힘을 내어 싸울 수 있다면, 귀천(貴賤)을 가리지 않고 모두 관작(官爵)을 제수하려 하니 너희는 불신함이 없도록 하라.”라고 하였다. 이에 관노(官奴)의 문서를 불사르고 또 노획한 소와 말을 그들에게 나누어 주었다. 마침내 사람들이 모두 죽음을 무릅쓰고 싸워 몽골군을 물리칠 수 있었다.
이 공로로 감문위 상장군(監門衛上將軍, 정3품)이 되었고, 그 나머지 군공이 있는 자들은 관노와 백정(白丁)에 이르기까지 모두 관작을 차등 있게 받았다. 이 사실은 중앙 정부와 일반 민(民)이 결합하여 대몽항쟁을 수행했던 대표적인 사례가 되었다. 1258년(고종 45)에 동북면 병마사(東北面兵馬使, 정3품)가 되었으나, 그때 동북면이 이미 몽골군의 수중에 들어갔으므로 부임하지 못하였다. 이어서 1262년(원종 3)에는 추밀원부사 예부상서(樞密院副使禮部尙書, 정3품)가 되었으며, 이듬해 수사공 우복야(守司空右僕射, 정2품)로 벼슬에서 물러났다.