I would use a persistent entity to store the OAuth token and it's createdDate.
Use a scheduled event that runs every X minutes to get the OAuth token and commit it. In this event also look to retrieve all objects with a createdDate over 30 minutes and delete them. If you are expecting to update the token every 30 minutes, maybe run this once every 10 minutes so if there is a problem getting the token, the existing token will still be valid for a while and should hopefully update the next time the event runs.
When you want to use the token, do a retrieve from the database but set an order by createDate and only select the first match. This should be the most recent OAuth token.
I hope this helps.