The pros at ELU are of the opinion that either 'on' or 'for' can be used, but officially (at least, according to Oxford) there is a subtle distinction. To wit, one is congratulated on something, when something good has happened to the person, and one is congratulated for something when the person has made an achievement. The examples given are: congratulating someone on their marriage vs congratulating staff for all their hard work.
Edit: Some help for those that may need assistance with paraphrasing comprehension:
either 'on' or 'for' can be used - from the ELU link: "the verb congratulate collocates with both prepositions".
but officially there is a subtle distinction - ELU: "but the meaning is slightly different".
one is congratulated on something, when something good has happened - ELU: "you congratulate someone on something ... because something special or pleasant has happened to them".
one is congratulated for something when the person has made an achievement - ELU: "When you congratulate someone for something you praise them for an achievement".
The ELU answer then references NGram which I didn't mention but as this doesn't change the essence of the answer I fail to see how this represents inaccurate paraphrasing. Ditto with the summary sentence "... both sound natural to me".
As to the distinction, I didn't make it, I merely reported it (because I was accurately paraphrasing), however, if you read the linked page, you'll see:
give (someone) one’s good wishes when something special or pleasant has happened to them: he had taken the chance to congratulate him on his marriage
discretely followed by:
praise (someone) for an achievement: the operators are to be congratulated for the service that they provide.
Obviously, there is a large likelihood that good things will happen if one puts in enough effort, so whether you are congratulating somebody for their achievements, or congratulating them on their resulting success can be a matter of semantics, the result of which is either construct is readily acceptable in conversational English. (This bit is my addition)