Works by

Ren's blog

@rennnosuke_rk 技術ブログです

【認証】OAuth2.0を簡単に理解する

OAuthとは

OAuthとは、複数のWebサービス間で権限の認可を行うための標準的な枠組みです。

あるユーザがサイトA上でアカウント情報などのリソースを持っていて、ユーザが別のサイトB上でAのリソースを使いたいとします。OAuthによってサイトBが認可を受ければ、サイトBはサイトAの持つユーザのリソースを使う権限を得ることができます。

OAuthでうれしいこと

例えばOAuthを使うことで、ユーザは一つサービスでの認証で複数の他のサービスを利用することができます。

またOAuthでは、サイトBは直接ユーザとの認証情報交換を行いません。
サイトBにユーザのアカウント情報が渡り、必要以上の権限を持ってしまうことを防止します。

OAuthの仕組み

4つの役割

OAuthには、4つの役割が存在します。

  • リソースオーナー
    リソースの持ち主、すなわちユーザに該当します。

  • リソースサーバー
    ユーザのリソースを持つ、サイトAに該当します。

  • クライアント
    サイトAのリソースを使いたがっている、サイトBに該当します。

  • 認可サーバー
    サイトBに対し、サイトAのリソースを使える権限を付与します。


f:id:rennnosukesann:20180220225559p:plain:w450


認可の流れ

まず、クライアント(サイトB)は、リソースの持ち主であるリソースオーナー(ユーザ)に認可要求を出します。


f:id:rennnosukesann:20180220225241p:plain:w450


この認可要求に対してリソースオーナーは認可グラントをクライアントに出します。
この認可グラントは、リソースオーナーからの「リソースにアクセスしてもいいよ」という証明です。


f:id:rennnosukesann:20180220230042p:plain:w450


次にクライアントは、認可サーバーに対して認可グラントを送ります。
リソースの持ち主に許可を得たことを証明するためです。


f:id:rennnosukesann:20180220230805p:plain:w450


これに対し、認可サーバーはクライアントが本物かどうか認証を行います。次に認可グラントが正しいかどうかを検証し、両方OKであればクライアントに「アクセストークン」を発行します。


f:id:rennnosukesann:20180220230906p:plain:w450


認可サーバーからアクセストークンをもらったクライアントは、リソースサーバー(サイトA)に対してアクセストークンを送りつつ、リソースを要求します。


f:id:rennnosukesann:20180220231041p:plain:w450


リソースサーバーはアクセストークンをチェックし、正しいことが確認できたらクライアントにリソースを送ります。


f:id:rennnosukesann:20180220231200p:plain:w450


これで、クライアントはリソースオーナーのリソースにアクセスすることができました。

注意点

このOAuthによって、クライアント上のユーザアカウントと、リソースサーバー上のユーザアカウントが紐付けられてしまうセキュリティリスクが存在するようです。

まとめ

  • OAuthは、複数Webサービス間の認可の仕組みを提供する

  • 複数サービス間の権限認可によるリソース共有を実現する

  • ユーザアカウント紐付けによるセキュリティリスクが存在する

参考文献

OAuth - Wikipedia

qiita.com