OAuthとは
OAuthとは、複数のWebサービス間で権限の認可を行うための標準的な枠組みです。
あるユーザがサイトA上でアカウント情報などのリソースを持っていて、ユーザが別のサイトB上でAのリソースを使いたいとします。OAuthによってサイトBが認可を受ければ、サイトBはサイトAの持つユーザのリソースを使う権限を得ることができます。
OAuthでうれしいこと
例えばOAuthを使うことで、ユーザは一つサービスでの認証で複数の他のサービスを利用することができます。
またOAuthでは、サイトBは直接ユーザとの認証情報交換を行いません。
サイトBにユーザのアカウント情報が渡り、必要以上の権限を持ってしまうことを防止します。
OAuthの仕組み
4つの役割
OAuthには、4つの役割が存在します。
リソースオーナー
リソースの持ち主、すなわちユーザに該当します。リソースサーバー
ユーザのリソースを持つ、サイトAに該当します。クライアント
サイトAのリソースを使いたがっている、サイトBに該当します。認可サーバー
サイトBに対し、サイトAのリソースを使える権限を付与します。
認可の流れ
まず、クライアント(サイトB)は、リソースの持ち主であるリソースオーナー(ユーザ)に認可要求を出します。
この認可要求に対してリソースオーナーは認可グラントをクライアントに出します。
この認可グラントは、リソースオーナーからの「リソースにアクセスしてもいいよ」という証明です。
次にクライアントは、認可サーバーに対して認可グラントを送ります。
リソースの持ち主に許可を得たことを証明するためです。
これに対し、認可サーバーはクライアントが本物かどうか認証を行います。次に認可グラントが正しいかどうかを検証し、両方OKであればクライアントに「アクセストークン」を発行します。
認可サーバーからアクセストークンをもらったクライアントは、リソースサーバー(サイトA)に対してアクセストークンを送りつつ、リソースを要求します。
リソースサーバーはアクセストークンをチェックし、正しいことが確認できたらクライアントにリソースを送ります。
これで、クライアントはリソースオーナーのリソースにアクセスすることができました。
注意点
このOAuthによって、クライアント上のユーザアカウントと、リソースサーバー上のユーザアカウントが紐付けられてしまうセキュリティリスクが存在するようです。
まとめ
OAuthは、複数Webサービス間の認可の仕組みを提供する
複数サービス間の権限認可によるリソース共有を実現する
ユーザアカウント紐付けによるセキュリティリスクが存在する