I did some further testing myself and channel_commercial is the correct scope. channel_editor alone will not work. (cc @DallasNChains error in the docs?) The channel does need to be live for the commercial to execute however you will get a different error indicating such:
{
"error": "Unprocessable Entity",
"status": 422,
"message": "Commercials breaks are allowed every 8 min and only when you are online."
}
I copied your code replacing my Client-ID and OAuth token (with channel_commerical scope) and received the offline channel error instead of the token error you are receiving.
I would recommend double checking your OAuth token to make sure it has the correct scope: https://api.twitch.tv/kraken?oauth_token=