The deal includes a 2018 salary of $1.75 million and a $2.5 million team option for 2019 that could become guaranteed based on appearances.
Oh reportedly failed a physical with the Rangers earlier this month, voiding a one-year, $2.75 million deal with Texas. The Dallas Morning News reported that the Rangers discovered "concerning issues" with Oh's arm when examining his MRI results.
The 35-year-old right-hander, who earned the nickname the "Final Boss" in South Korea, saved 39 games in two seasons with the St. Louis Cardinals.
He finished sixth in National League Rookie of the Year voting in 2016 when he went 6-3 with 19 saves and a 1.92 ERA in 79⅔ innings but struggled last season, finishing 1-6 with 20 saves and a 4.10 ERA in 59⅓ innings. He has blown four save opportunities in each of his two seasons.
With Toronto, Oh likely would serve as a setup man for All-Star closer Roberto Osuna, who has 95 saves in three seasons with the Blue Jays.
Toronto cleared a roster spot by designating outfielder Ezequiel Carrera for assignment.
The Associated Press contributed to this report.