Mo Dahoud broke the deadlock two minutes after the restart with a low shot, after the hosts had dominated the first 45 minutes with more than 70% possession in some stretches of play.
Jadon Sancho made it 2-0 with a well-taken 58th minute penalty, confirming his fine form with his sixth league goal.
Brazilian teenager Reinier notched his first ever Bundesliga goal to help lift Dortmund to fifth place on 39 points, three behind Frankfurt. The top four teams qualify for the Champions League next season.
The Ruhr valley club have now won their last three games in all competitions, including a 3-2 win at Sevilla in their Champions League round of 16 first leg.