Drake Caggiula scored two goals, and Tobias Rieder had two assists for Edmonton (7-4-1), which has won four of its past five games.
"I think I have been playing pretty well this season and with a lot of confidence, and the coaches put me in a new role today (top line) and I was happy to answer the bell," Caggiula said. "It was just one game. I have to make sure I stay consistent."
WATCH: [All Blackhawks vs. Oilers highlights]
Cam Ward made 25 saves for Chicago (6-5-3), which was shut out for the first time this season in its fourth straight loss.
"I don't know if the frustration level is high at the end of day, even though it doesn't look good on the scoreboard," Blackhawks captain Jonathan Toews said. "Last night in Vancouver (a 4-2 loss), it was pretty similar as it was tonight. We start pressing and we make mistakes and pucks start going in against us. But for the most part, we're involved and we're in the game giving ourselves a chance to win for the majority of 60 minutes."
Caggiula scored 18 seconds into the second period to give the Oilers a 1-0 lead. He took a pass from Ryan Nugent-Hopkins in front following a turnover in the corner and beat Ward five-hole.
Koskinen made the save on Toews on a shorthanded breakaway at 13:54 to preserve the one-goal lead.
"I can't say enough about him. He was standing tall and made a lot of big saves, acrobatic saves," Caggiula said. "He made some really key saves in big moments to keep the game close. He is a big goalie for us and he adds a lot of confidence to our team when he plays like that."
Said Koskinen, "Honestly, I only care if we win or lose, so it feels good because all that matters is that we need points and we got two, so we're happy. It's always fun when there is a lot of shots, the rhythm is then easier for me, so I can't complain."