OAuthとは、インターネット上で提供されている複数のサービスを、ユーザの認可の元で連携させるために使用される、認可情報をやり取りするためのプロトコルです。2010年4月に「OAuth 1.0」が「RFC 5849」として、2012年10月に「OAuth 2.0」が「RFC 6749」として公開されています。
例えば、Instagramに投稿した写真を、Twitterにも投稿することを考えてみましょう。ユーザが両方のサービスにアクセスし、同じ投稿作業を行うのは面倒です。しかし、Instagramには、Twitter等のSNSと連携し、自分に投稿された内容を他のSNSにも自動的に投稿するクロスポストという機能があります。この機能を使うとInstagram自身がユーザの代理として、TwitterのAPIを介して投稿が行なえます。
この時に使われるのがOAuthです。Twitterに投稿するには、通常ユーザIDとパスワードといった認証情報が必要です(このIDをパスワードによる認証をベーシック認証といいます)が、他のサービスにこれらの情報を託すのは危険です。そこでOAuthによって、認証情報ではなく「認可情報」のみをやり取りし、代行の認可を行うわけです。
OAuthでは、認可を受けるサービスを「OAuthクライアント(上の例で言えばInstagram)」、認可を与えるサービスを「OAuthサーバ(上の例で言えばTwitter)」、ユーザを「リソース オーナ」と呼びます。OAuthクライアントは事前にOAuthサーバに対し、アプリケーション名やドメイン名等を添えて、自分自身を登録しておく必要があります。OAuthサーバはOAuthクライアントを信頼できると判断した場合に、クライアントIDを発行します。
OAuthクライアントがリソース オーナの代行を行えるようにするには、リソース オーナからの認可を受ける必要があります。OAuthクライアントはリソース オーナからの認可を受けると、リソース オーナをOAuthサーバにリダイレクトします。OAuthサーバはユーザ認証を行い、リソース オーナに対して「OAuthクライアントへのアクセス権限付与を許可するかどうか」を尋ねます。リソース オーナが許可を選択すると、リソース オーナは再びOAuthクライアントにリダイレクトされ、OAuthクライアントはアクセス トークンを受け取ります。アクセス トークンとは、OAuthサーバのAPIにアクセスする際に、アクセス権限が付与されていることを証明する鍵のようなものです。アクセス トークンを受け取ったOAuthクライアントは、それが期限切れになるか無効化されるまで、それを使ってOAuthサーバのAPIにアクセスできます。