OAuth認可とは何か?Webサービス間の認可連携の仕組みを解説

OAuth認可とは

OAuth認可とは、権限の認可を行うための技術仕様です。日本語では「オーオース」と呼ばれます。
最新の標準はOAuth 2.0としてRFC6749[1]RFCとは、Request for Commentの略で、インターネット技術の標準的な仕様に関する文書のことに定義されています。

OAuthの仕組み

4つの役割

ここからはOAuthの仕組みについて解説していきます。
OAuthを理解するためには、以下の4つの役割を把握することが不可欠です。

リソースオーナー(resource owner)

リソースオーナーとは、保護されたリソースへのアクセスを許可する役割です。
多くの場合、エンドユーザーのことです。

リソースサーバー(resource server)

リソースサーバーとは、リソースオーナーのリソースを保持するサーバーです。
リソースはアクセストークン[2]クライアントがリソースオーナーのリソースを利用することを許可されていることを示すものによって保護されています。

クライアント(client)

クライアントとは、リソースオーナーの代理としてリソースサーバーへ、リソースのリクエストを行うアプリケーションのことです。

認可サーバー(authorization server)

リソースオーナーからの認可を得て、クライアントに対してアクセストークンを発行するサーバーです。

プロトコルフロー

OAuth 2.0はRFC6749によって以下のとおりフローが定義されています。

OAuth認可のプロトコルフロー
  1. クライアントがリソースオーナーに認可を要求します。
  2. リソースオーナーは認可要求を承諾し、認可グラント(リソースオーナーとしての承諾)をクライアントに送ります。
  3. クライアントは認可サーバーに対して認可グラントを提示し、アクセストークンを要求します。
  4. 認可サーバーはクライアントを認証し、認可グラントの正当性を検証します。認可グラントが正当であればアクセストークンを発行します。
  5. クライアントは認可サーバーより受け取ったアクセストークンを用いて、リソースサーバーへ保護されたリソースへのアクセスを要求します。
  6. リソースサーバーはアクセストークンの正当性を検証し、問題なければリクエストを受け入れます。

認証(Authentication)と認可(Authorization)の違い

認証と認可は密接な関係を持っていますが、それぞれ別の概念です。認証とは相手が誰かを確認すること、認可とはアクセス権限を与えることです。認可には認証が含まれることが多いため混乱しますが、純粋な認可は相手が誰であるかは確認しません。OAuthは認証ではなく認可の仕様です。

たとえば、図書館で利用者カードを作るために運転免許証の提示を求められるとします。この場合は運転免許証は本人確認(認証)のために使用されます。

一方、映画館ではチケットさえあれば、その持ち主が誰であるかにかかわらず映画を観ることができます。チケットによって権限を与えられたことが証明(認可)されているからです。

映画のチケットがアクセストークン、各チケット取扱所が認可サーバーということになります。

なぜOAuth認可が必要なのか

OAuthは悪意を持ったアプリケーションがリソースオーナーのリソースにアクセスするのを防ぎます。OAuthの仕組みがなかった場合、アクセストークンを持たないクライアントがリソースにアクセスすることができてしまいます。

リソースサーバーはアクセストークンが正当な場合のみリソースオーナーのリソースをクライアントへ渡します。アクセストークンを発行する係として認可サーバーが必要になります。

OAuth認可はどう使われるのか

GoogleやTwitter、ブログなど複数のWebサービスを連携させる際にOAuthが利用されます。

通常Webサービスを利用するにはそれぞれにアカウントとパスワードを入力する必要があります。しかしOAuthを利用すれば、別のWebサービスを利用する際にユーザー情報の入力不要で連携することが可能です。 たとえば、ブログに記事を投稿した後に、ブログの画面からTwitterにツイートするといったことができます。これはTwitterのリソースを使うことをユーザーが認可するためです。

参考

1 RFCとは、Request for Commentの略で、インターネット技術の標準的な仕様に関する文書のこと
2 クライアントがリソースオーナーのリソースを利用することを許可されていることを示すもの