https://medium.com/@hwang74/how-to-implement-oauth-2-0-part-1-what-is-it-and-should-i-write-my-own-b47567cf1ee9