プロトコルOAuth 2.0の動作|情報処理安全確保支援士 平成27年 秋期午前Ⅱ試験 問17

出典:平成27年秋期 午前Ⅱ 問17 分野:セキュリティ / セキュリティ実装技術
OAuth 2.0において,WebサービスAの利用者Cが,WebサービスBにリソースDを所有している。利用者Cの承認の下,WebサービスAが,リソースDへの限定的なアクセス権限を取得するときのプロトコルOAuth 2.0の動作はどれか。
  • ア:WebサービスAが,アクセストークンを発行する。
  • イ:WebサービスAが,利用者Cのディジタル証明書をWebサービスBに送信する。
  • ウ:WebサービスBが,アクセストークンを発行する。
  • エ:WebサービスBが,利用者Cのディジタル証明書をWebサービスAに送信する。
解説

OAuth 2.0は、利用者のパスワードそのものを第三者のWebサービスに渡すことなく、アクセストークンを使って限定的なアクセス権限を与えるための仕組みです。

OAuth 2.0ダウンロード

この設問では、OAuth 2.0の役割を次のように整理できます。厳密には「認可サーバ」という役割もありますが、この問題ではWebサービスB側がその役割も担うものとして考えます。

役割 説明 この設問
リソースオーナー
(Resource Owner)
保護されたリソースへのアクセスを許可する利用者です。 利用者C
リソースサーバ
(Resource Server)
保護されたリソースを保持し、アクセストークンを確認してリソースを提供します。この設問では認可サーバの役割もWebサービスB側が担います。 WebサービスB
クライアント
(Client)
リソースオーナーの許可を得て、リソースへアクセスするアプリケーションです。 WebサービスA

処理の流れは次のようになります。

  1. 利用者Cが、WebサービスAを利用します。
  2. WebサービスAは、利用者CをWebサービスB側へ誘導し、認証・認可の手続きを促します。
  3. 利用者CはWebサービスB側で認証を受け、WebサービスAにリソースDへの限定的なアクセスを許可します。
  4. WebサービスB側の認可サーバは、その認可に基づいてWebサービスAへアクセストークンを発行します。
  5. WebサービスAは、取得したアクセストークンを付けてWebサービスBへリソースDを要求します。
  6. WebサービスBはアクセストークンを検証し、有効であればリソースDをWebサービスAへ返します。

つまり、アクセストークンを発行するのは、アクセスする側のWebサービスAではなく、リソースを管理するWebサービスB側の認可サーバです。

したがって、ウが適切です。

❌他選択肢が誤りの理由
ア:WebサービスAが,アクセストークンを発行する。
⇒WebサービスAはアクセストークンを受け取って利用するクライアントです。アクセストークンを発行するのは、WebサービスB側の認可サーバです。
イ:WebサービスAが,利用者Cのディジタル証明書をWebサービスBに送信する。
⇒OAuth 2.0では、利用者のデジタル証明書をクライアントからリソースサーバへ送信して権限を与える仕組みではありません。利用者の認可に基づいて発行されたアクセストークンを使用します。
エ:WebサービスBが,利用者Cのディジタル証明書をWebサービスAに送信する。
⇒OAuth 2.0でWebサービスB側からWebサービスAへ渡されるのは、利用者Cのデジタル証明書ではなく、限定されたアクセス権限を示すアクセストークンです。
TSUNAGARU-ADVICE

まず押さえたいこと

OAuth 2.0は、利用者の承認に基づいて、あるWebサービスに対して別のWebサービス上のリソースへ限定的なアクセス権限を与える仕組みです。このとき、リソースを管理する側がアクセストークンを発行することで、パスワードそのものを渡さずに権限を委譲できます。

迷ったときの判断軸

OAuth 2.0では、WebサービスAはアクセスを受ける側ではなく、利用者の承認を得てリソースへアクセスするクライアント側です。アクセストークンは、リソースを管理するWebサービスB側の認可サーバが発行します。また、デジタル証明書を利用者間で送る仕組みではありません。誰がリソースを持ち、誰がトークンを発行するかを整理して判断しましょう。

科目Bにつなげるために

科目Bでは、OAuth 2.0・アクセストークン・認可サーバ・リソースサーバ・クライアントなどの役割を図や事例から読み取る問題が考えられます。認証と認可を混同せず、利用者の許可に基づいて、どのサービスへどの範囲の権限を委譲しているのかを追えるようにしておきましょう。