情報処理安全確保支援士 2021年 春期 午後1 問01
認証システムの開発に関する次の記述を読んで、設問1~4に答えよ。
S社は、従業員10名のベンチャー企業である。S社のファイル共有サービス(以下、Sサービスという)は機能が豊富であり、登録会員(以下、S会員という)の数を伸ばしている。
Sサービスでは、利用者認証されたS会員が写真などのファイルを自身に割り当てられたフォルダにアップロードできる。さらに、当該ファイルにアクセスするためのURLを電子メールなどで他者に示すことによって、当該ファイルを他者と共有できる。また、Sサービス内でメッセージや“いいね”を送信できる。
Sサービスの企画、開発及び運用は、CTOのF氏が取り仕切っており、そのうち、開発と運用は、F氏の指示の下、S社エンジニア2名が行っている。Sサービスは、外部セキュリティ企業による脆弱性診断を随時受けている。
〔Sサービスの改修〕
前回の脆弱性診断では、利用者IDとパスワードを用いて利用者認証するSサービスの認証モジュール(以下、S認証モジュールという)の認証方式を、多要素認証にする方がよいとのアドバイスを受けたが、その対処が課題であった。そこで、F氏は、認証及び認可を提供するSNS(以下、認証認可提供SNSという)のうち、多要素認証などの機能をもつT社のTサービスとSサービスとをID連携する改修をCEOのX氏に提案した。その改修によって、S認証モジュールを用いないS会員の登録と多要素認証の実現を目指す。ただし、今回の改修でのID連携では、既存のS会員は対象とせず、新規登録のS会員だけを対象とする。改修後も当面は既存のS会員の認証のために、S認証モジュールも継続して稼働させる。
F氏は、①S認証モジュールの代わりにTサービスとのID連携を利用することにはどのような利点と欠点があるかをX氏に説明した。X氏は、ID連携技術に詳しい情報処理安全確保支援士(登録セキスペ)のY氏を外部から招聘して、実装の最終段階でのレビューを受けることを前提に、Sサービスの改修を承認した。
今回の改修では、OAuthのAuthorization Code Grantを採用する。OAuthは、認証認可提供SNSと認可情報を送受信するためのプロトコルの一つである。OAuthを用いた認可における三つの主体の説明を図1に、認可のシーケンスを図2に示す。



図2のシーケンスにおいて、a は、b が提供するリソースにアクセスできる。それは c が、図3に示す権限を a に与えるからである。c は a に与える権限を図2中の [ α ] の通信の際に確認する。図3のうち、どの権限を要求するかは、a の実装者が決定する。
S社では、要求した権限のいずれか一つでも、c が与えることを拒否する場合は、シーケンスを止めるように実装することにした。
なお、Sサービスでは、将来どの権限も利用すると考え、図3の全権限を要求することにした。
次に、TサービスとSサービスとのID連携について、実装の最終段階でY氏のレビューを受けた。Y氏はセキュリティ上の問題を三つ指摘した。
〔一つ目の問題〕
Y氏は、一つ目の問題を、次の攻撃シナリオで説明した。
Sサービスにログインしていない利用者が攻撃者の用意した罠サイトにアクセスすると、図4中に示すシーケンスXが走り、後に、②利用者が攻撃を受けているとは知らずにSサービスにファイルをアップロードすると、そのファイルを攻撃者にダウンロードされてしまうおそれがある。

この対策として、RFC6749は、図2のシーケンスで、推測困難な値であるstateパラメタを利用することを推奨している。Sサービスはstateパラメタをβを送信する際に付与する。Sサービスはγを受信する際に、そのセッションが、stateパラメタを付与した際のβのセッションと同一であるか否かを確認する。同一である場合だけシーケンスを続ける。
〔二つ目と三つ目の問題〕
二つ目の問題は、③SサービスがTサービスに要求する権限が必要最小限のものになっていないことである。この問題については、要求する権限を一つだけにした。
三つ目の問題は、Tサービスに深刻な弱性が報告された場合の対応方法を決めていなかったことである。この問題については、TサービスとのID連携を一時的に停止し、S認証モジュールだけで認証することにした。ただし、このとき④一部のS会員はSサービスを利用できなくなるので、対象のS会員向けに代替策を検討することにした。
〔利用者認証の実現について〕
X氏は、全面改修してS認証モジュールを停止した後の利用者認証の実現方式についてY氏に確認した。Sサービスは利用者を直接認証していないが、⑤Sサービスは、登録されたS会員をどのように利用者認証しているかを、Y氏はX氏に解説した。
S社では、Y氏から指摘された問題を解決した後、TサービスとSサービスとのID連携を開始した。
設問1:〔Sサービスの改修〕について、(1)〜(4)に答えよ。
(1)本文中の下線①について、S社の課題に即した利点を30字以内で具体的に述べよ。
模範解答
多要素認証の実装をSサービス側に用意しなくてよい。
解説
解答の論理構成
- 問題文は、外部セキュリティ企業からの指摘として「多要素認証にする方がよい」と述べています。
引用:「前回の脆弱性診断では、…認証方式を、多要素認証にする方がよいとのアドバイスを受けた」。 - しかし S社は従業員が「10名」でエンジニアも「2名」しかおらず、自前で多要素認証を開発・運用する負荷は大きいことが読み取れます。
- そこで F氏は「T社のTサービスとSサービスとをID連携する改修」を提案し、「その改修によって、S認証モジュールを用いないS会員の登録と多要素認証の実現を目指す」と記載されています。
- 以上より、ID連携を採用する利点は「多要素認証の機能を外部サービスに任せられ、Sサービス側で開発・維持しなくて済む」点であると導けます。
- したがって模範解答「多要素認証の実装をSサービス側に用意しなくてよい。」が妥当になります。
誤りやすいポイント
- 利点を「セキュリティが高まる」とだけ書くと具体性不足で減点されやすい。
- 「Tサービスのユーザが増える」など、S社の課題と直接関係しない利点を書くと的外れになる。
- 欠点と混同し、「外部サービス依存が増す」などネガティブ要素を書いてしまうミス。
FAQ
Q: なぜ自社実装せず外部サービスを使うのが利点なのですか?
A: 開発・運用コストを大幅に削減でき、専門知識が少ない小規模組織でも短期間で多要素認証を導入できるからです。
A: 開発・運用コストを大幅に削減でき、専門知識が少ない小規模組織でも短期間で多要素認証を導入できるからです。
Q: 外部サービスに任せるとセキュリティは本当に向上しますか?
A: 多要素認証自体の強度は上がりますが、依存先に脆弱性が出た場合のリスク管理(利用停止手順など)を別途用意する必要があります。
A: 多要素認証自体の強度は上がりますが、依存先に脆弱性が出た場合のリスク管理(利用停止手順など)を別途用意する必要があります。
Q: S認証モジュールは将来廃止すべきでしょうか?
A: 既存会員の移行が完了し、代替策が確立できれば廃止してもよいですが、移行期間中は両方式を併用し可用性を確保するのが一般的です。
A: 既存会員の移行が完了し、代替策が確立できれば廃止してもよいですが、移行期間中は両方式を併用し可用性を確保するのが一般的です。
関連キーワード: ID連携、多要素認証、OAuth, 認可コードグラント、認証基盤
設問1:〔Sサービスの改修〕について、(1)〜(4)に答えよ。
(2)本文中の下線①について、可用性の観点での欠点を30字以内で述べよ。
模範解答
Tサービスの障害時にSサービスを利用できない。
解説
解答の論理構成
- 【問題文】では、F氏が実施する改修について「①S認証モジュールの代わりにTサービスとのID連携を利用することにはどのような利点と欠点があるか」を説明したと記載されています。
- 可用性とはサービスが“使いたいときに使える”状態を指します。
- S認証モジュールを停止し、新規 S会員 は「Tサービス」との ID 連携でしか認証できなくなるため、利用可否が Tサービス の稼働状況に依存します。
- もし「Tサービス」に障害が発生すれば、Sサービス側で認証処理を完了できず、利用者はログインできません。
- 以上より、可用性の観点からの欠点は「Tサービスの障害時にSサービスを利用できない」となります。
誤りやすいポイント
- 「可用性」を問われているのに、セキュリティ(機密性・完全性)面の欠点を書いてしまう。
- 「障害時にID連携ができない」とだけ書き、Sサービスを利用できない点まで踏み込まない。
- 連携停止=S認証モジュールへ自動フォールバックと誤解し、欠点がないと判断する。
FAQ
Q: 既存の S会員 は従来の「S認証モジュール」でログインできますか?
A: はい。改修後も「既存のS会員」は対象外とし、「S認証モジュール」も継続稼働と明記されています。
A: はい。改修後も「既存のS会員」は対象外とし、「S認証モジュール」も継続稼働と明記されています。
Q: Tサービス側の計画停止(メンテナンス)でも同じ欠点になりますか?
A: なります。計画停止でも認証要求は失敗し、可用性が損なわれるためです。
A: なります。計画停止でも認証要求は失敗し、可用性が損なわれるためです。
Q: フェデレーション先の冗長構成を確認することは欠点の緩和策になりますか?
A: あります。Tサービスがリージョン冗長や SLA を公開していれば、可用性リスクを定量的に評価しやすくなります。
A: あります。Tサービスがリージョン冗長や SLA を公開していれば、可用性リスクを定量的に評価しやすくなります。
関連キーワード: 可用性、多要素認証、ID連携、フェデレーション、障害対策
設問1:〔Sサービスの改修〕について、(1)〜(4)に答えよ。
(3)本文中のa〜cに入れる適切な字句を解答群の中から選び、記号で答えよ。
解答群
ア:Sサービス
イ:Tサービス
ウ:利用者
模範解答
a:ア
b:イ
c:ウ
解説
解答の論理構成
- 問題文では「図2のシーケンスにおいて、a は、b が提供するリソースにアクセスできる。」とある。OAuth の文脈で“リソースを提供する”主体はリソースサーバであり、本設問では「Tサービス」がその役割を担うため、b =「Tサービス」。
- 「それは c が、図3に示す権限を a に与えるからである。」とある。リソースオーナ(権限を与える主体)は利用者自身であるため、c =「利用者」。
- 「図3のうち、どの権限を要求するかは、a の実装者が決定する。」とある。a は権限を要求し、アクセストークンを取得する“クライアント”であり、本設問では「Sサービス」が該当する。
- 以上より
a:Sサービス(ア)
b:Tサービス(イ)
c:利用者(ウ)
誤りやすいポイント
- リソースを“保有”する主体と“提供”する主体を混同し、b に「利用者」を入れてしまう。
- OAuth の三者関係(クライアント/リソースサーバ/リソースオーナ)を覚えていても、具体的なサービス名に置き換える際に逆転させてしまう。
- a の実装者が権限を決定するという記述から a を「利用者」と誤解するケース。実際に実装(プログラム)を行うのはサービス側である点を見落としやすい。
FAQ
Q: OAuth ではクライアントが必ずしもウェブサービスでなくてもよいのですか?
A: はい。デスクトップアプリやモバイルアプリなど、リソースオーナに代わって API を利用したいソフトウェアはすべてクライアントになり得ます。本問ではたまたま「Sサービス」がクライアントです。
A: はい。デスクトップアプリやモバイルアプリなど、リソースオーナに代わって API を利用したいソフトウェアはすべてクライアントになり得ます。本問ではたまたま「Sサービス」がクライアントです。
Q: 「権限を与える」とはアクセストークン発行を指しますか?
A: 正確には、利用者が権限付与画面で同意した結果を受けてリソースサーバ(Tサービス)がアクセストークンを発行し、それをクライアント(Sサービス)が受け取って API を呼び出せる状態になることを指します。
A: 正確には、利用者が権限付与画面で同意した結果を受けてリソースサーバ(Tサービス)がアクセストークンを発行し、それをクライアント(Sサービス)が受け取って API を呼び出せる状態になることを指します。
Q: “権限は一つに絞る”という指摘は最小権限の原則でしょうか?
A: そのとおりです。必要最小限に留めることで、トークンが漏えいしても被害範囲を小さくできます。
A: そのとおりです。必要最小限に留めることで、トークンが漏えいしても被害範囲を小さくできます。
関連キーワード: OAuth, Authorization Code Grant, アクセストークン、リソースオーナ、クライアント
設問1:〔Sサービスの改修〕について、(1)〜(4)に答えよ。
(4)本文中の[ α ]に入れる適切な字句を図2中の(あ)〜(こ)から選び、記号で答えよ。
模範解答
α:(え)
解説
解答の論理構成
- 問題文には「“Tサービス は a に与える権限を図2中のαの通信の際に確認する。”」と記されています。
- 権限(scope)の確認は、OAuth 2.0 Authorization Code Grant における“利用者が認可サーバ(ここではTサービス)に対してログインし、同意画面で権限付与を選択する”タイミングで行われます。
- 図2の各通信(あ)〜(こ)のうち、Tサービスと利用者が直接やり取りし、利用者が認証と同意を行うフェーズは「(え)」だけです。
- よって、αに入るのは「(え)」であり、模範解答「α:(え)」が導かれます。
誤りやすいポイント
- 「(う)」の“利用者→Tサービス”を同意画面と勘違いする
(う) はブラウザ経由でリクエストが飛ぶだけで、まだ同意確認は始まっていません。 - 「(か)」の“認可コード受領”を権限確認と誤解する
認可コードが発行された後では同意はすでに完了しており、確認フェーズは終了しています。 - “Sサービスが確認する”と読んでしまう
問題文は「Tサービス は … 確認する」と明示しており、主体を取り違えると選択を誤ります。
FAQ
Q: OAuth 2.0 で権限確認が行われるのは必ず利用者と認可サーバ間ですか?
A: はい。利用者が同意しない限り認可コードは発行されないため、利用者と認可サーバ(Tサービス)の対話が必須です。
A: はい。利用者が同意しない限り認可コードは発行されないため、利用者と認可サーバ(Tサービス)の対話が必須です。
Q: 「state」パラメタは今回のα選択と関係がありますか?
A: 関連はありません。αは権限確認の通信箇所を示す設問であり、stateはCSRF対策として別に付与・検証される値です。
A: 関連はありません。αは権限確認の通信箇所を示す設問であり、stateはCSRF対策として別に付与・検証される値です。
Q: なぜSサービスは直接権限を確認しないのですか?
A: OAuthの設計ではリソース所有者である利用者が自らの意思でスコープを許可・拒否します。クライアント(Sサービス)はその結果として認可コードやトークンを受け取るだけです。
A: OAuthの設計ではリソース所有者である利用者が自らの意思でスコープを許可・拒否します。クライアント(Sサービス)はその結果として認可コードやトークンを受け取るだけです。
関連キーワード: OAuth, Authorization Code Grant, スコープ、同意画面、CSRF
設問2:〔一つ目の問題〕について、(1)〜(3)に答えよ。
(1)図4中のd、eに入れる適切な字句を解答群の中から選び、記号で答えよ。
解答群
ア:アクセストークンの要求
イ:アクセストークン
ウ:認可コード
エ:認可の要求
オ:認証、権限付与の確認
模範解答
d:ウ
e:ア
解説
解答の論理構成
- 図4のステップ6で「Tサービス」から「攻撃者」へ送られるメッセージのラベルは【問題文】に「認可コード」と明示されています。攻撃者はこれを自サイト内の2か所の枠(d)に保持し、リダイレクトで利用者に送り返します。
── よって d には「ウ:認可コード」が入ります。 - 図4のステップ9で「利用者」から「Sサービス」へ渡る内容も同じ d であるため、ここも「認可コード」です。
- 認可コードを受け取った「Sサービス」は、図2の(き)に相当する処理として「アクセストークンの要求」を「Tサービス」に送ります。図4ステップ10の e がこれに対応します。
- 解答群を照合すると、アクセストークンを要求するメッセージは「ア:アクセストークンの要求」に一致します。
以上より
d:ウ
e:ア
d:ウ
e:ア
誤りやすいポイント
- 認可コードとアクセストークンを混同し、d に「イ:アクセストークン」を入れてしまう。アクセストークンは図2の(く)で Tサービス→Sサービス に返る応答であり、利用者経由ではない点に注意です。
- 図4と図2を対応付ける際、攻撃者が介在しているため手順番号がずれて見え、メッセージの向きや送信者を取り違える。
- 「認証、権限付与の確認」(オ)は Tサービス→利用者 に出る対話画面を指し、コードやトークンを運ぶメッセージではない点を見落としやすい。
FAQ
Q: なぜ利用者ではなく Sサービス がアクセストークンを直接受け取るのですか?
A: Authorization Code Grant では、フロント(利用者ブラウザ)を経由するのは一度限りの「認可コード」です。アクセストークンはサーバサイド間通信で授受し、クライアント側に漏れないようにするのが設計思想です。
A: Authorization Code Grant では、フロント(利用者ブラウザ)を経由するのは一度限りの「認可コード」です。アクセストークンはサーバサイド間通信で授受し、クライアント側に漏れないようにするのが設計思想です。
Q: stateパラメタを付与すると今回の攻撃はどう防げますか?
A: 「Sサービスは[ γ ]を受信する際に…同一である場合だけシーケンスを続ける」という仕様により、攻撃者が偽装して持ち込む認可コードとセッションが一致せず、アクセストークンを取得できなくなるためです。
A: 「Sサービスは[ γ ]を受信する際に…同一である場合だけシーケンスを続ける」という仕様により、攻撃者が偽装して持ち込む認可コードとセッションが一致せず、アクセストークンを取得できなくなるためです。
Q: 認可コードが漏えいした場合、即座に被害が発生しますか?
A: 認可コードは短寿命かつ1回限り有効です。しかし攻撃者が素早くアクセストークンを交換できれば被害が生じ得るため、TLS と stateパラメタでコードの盗聴・差替えを防ぐ必要があります。
A: 認可コードは短寿命かつ1回限り有効です。しかし攻撃者が素早くアクセストークンを交換できれば被害が生じ得るため、TLS と stateパラメタでコードの盗聴・差替えを防ぐ必要があります。
関連キーワード: OAuth, 認可コード、アクセストークン、CSRF, stateパラメタ
設問2:〔一つ目の問題〕について、(1)〜(3)に答えよ。
(2)本文中の下線②について、ファイルのアップロードと、ファイルのダウンロードは、それぞれTサービスの誰のアカウントによって行われるか。それぞれ6字以内で答えよ。
模範解答
ファイルのアップロード:攻撃者
ファイルのダウンロード:攻撃者
解説
解答の論理構成
-
攻撃シナリオの概要
- 本文では、罠サイト経由で「図4 攻撃のシーケンス」が実行されると、「利用者が攻撃を受けているとは知らずにSサービスにファイルをアップロードすると、そのファイルを攻撃者にダウンロードされてしまうおそれがある」と述べています。
- ここで問題となるのは、Sサービスが 誰の Tサービスアカウント(T-ID) を利用して操作を行っているかです。
-
T-ID が攻撃者にすり替わる仕組み
- 図2の注記には、初回利用時に「Tサービスから取得したアカウント名(以下、T-IDという)をSサービス内に登録する」とあります。
- 図4では、攻撃者が「認可の要求」〜「認可コード」を自分のブラウザで完結させた後、d(認可コード)を利用者のブラウザへリダイレクトさせています。
- Sサービスは state パラメタ未検証 のまま d を受信するため、攻撃者の認可コードを正規の利用者セッションに紐付けてしまい、結果として「攻撃者の T-ID」を登録します。
-
アップロード時に使われるアカウント
- 利用者は自分のつもりでファイルをアップロードしますが、Sサービス側が保持する T-ID は「攻撃者の T-ID」です。
- よって、Tサービス上は “攻撃者” アカウントの権限 でアップロードが行われることになります。
-
ダウンロード時に使われるアカウント
- ファイルが攻撃者の領域に置かれているため、攻撃者は自分の T-ID でログインしたまま正規機能を使い、容易にダウンロードできます。
- したがって、ダウンロードも “攻撃者” アカウント によって実施されます。
-
以上より
- ファイルのアップロード:攻撃者
- ファイルのダウンロード:攻撃者
誤りやすいポイント
- 「アップロードは利用者が操作しているから利用者のアカウント」と勘違いする。実際には登録済み T-ID が攻撃者に置き換わっている。
- 「ダウンロードは攻撃者だからアップロードは利用者」と対称関係で覚えてしまう。
- state パラメタ検証の有無がアカウントすり替えの核心であることを見落とす。
FAQ
Q: 利用者が自分の Tサービスに再ログインすると問題は解消されますか?
A: いいえ。Sサービス側に既に「攻撃者の T-ID」が登録済みのため、再ログインしても Sサービス内部の紐付けは変わりません。
A: いいえ。Sサービス側に既に「攻撃者の T-ID」が登録済みのため、再ログインしても Sサービス内部の紐付けは変わりません。
Q: state パラメタを導入すればアップロードもダウンロードも阻止できますか?
A: はい。state パラメタでセッション整合性を確認すれば、攻撃者の認可コードを利用者セッションに結び付けることができなくなり、ファイル領域の乗っ取り自体が成立しません。
A: はい。state パラメタでセッション整合性を確認すれば、攻撃者の認可コードを利用者セッションに結び付けることができなくなり、ファイル領域の乗っ取り自体が成立しません。
Q: 一度乗っ取られた後に Sサービス側で対処する方法はありますか?
A: 登録済みの T-ID とセッションをリセットし、利用者に再認証を求めることで回復可能です。ログの確認とファイル権限の修正も忘れずに行います。
A: 登録済みの T-ID とセッションをリセットし、利用者に再認証を求めることで回復可能です。ログの確認とファイル権限の修正も忘れずに行います。
関連キーワード: CSRF, OAuth, アクセストークン、stateパラメタ、セッション管理
設問2:〔一つ目の問題〕について、(1)〜(3)に答えよ。
(3)本文中のβ、γに入れる適切な字句を、図2中の(あ)〜(こ)から選び、記号で答えよ。
模範解答
β:(い)
γ:(か)
解説
解答の論理構成
- 【問題文】には
“Sサービスはstateパラメタをβを送信する際に付与する”
とあり、state 付きの“認可リクエスト”をどのタイミングで送るかを示しています。 - 図2では、Sサービスから利用者へ“認可の要求”を出す工程が(い)です。ここが“認可リクエスト”に相当するため、[ β ]=(い) と判断できます。
- 次に
“Sサービスはγを受信する際に、そのセッションが…同一であるか否かを確認する”
とあります。state を検証するのは、“認可コード”が返ってくるタイミングです。 - 図2で“認可コード”がSサービスに戻る工程は(か)であり、ここで state 値を照合して CSRF を防御します。したがって [ γ ]=(か) となります。
以上より、
β:(い)
γ:(か)
γ:(か)
誤りやすいポイント
- “state を付与する”場面を(う)と誤認する例が多いですが、(う)は利用者がTサービスへ転送する部分であり、Sサービスが直接パラメータを付けられません。
- “state を検証する”場面を(き)と誤答しやすいですが、(き)はアクセストークン要求であり、state の照合は既に完了しているべき段階です。
- “利用者→Sサービス”の戻り工程を見落とし、Tサービス→Sサービスのライン(お)を選んでしまう混同も頻発します。
FAQ
Q: state パラメータは必須ですか?
A: RFC6749 では“推奨”ですが、CSRF 攻撃を防ぐ重要な対策であり、実運用では必須と考えるべきです。
A: RFC6749 では“推奨”ですが、CSRF 攻撃を防ぐ重要な対策であり、実運用では必須と考えるべきです。
Q: state はどのような値にすれば安全ですか?
A: セッションごとにランダムに生成した推測困難なトークンにし、サーバ側で保存しておくことが求められます。
A: セッションごとにランダムに生成した推測困難なトークンにし、サーバ側で保存しておくことが求められます。
Q: 図2の(け)・(こ)は state と関係ありますか?
A: ありません。これらはアクセストークン取得後に Tサービスからアカウント名を取得する API 呼び出しで、state 検証は完了済みです。
A: ありません。これらはアクセストークン取得後に Tサービスからアカウント名を取得する API 呼び出しで、state 検証は完了済みです。
関連キーワード: Authorization Code Grant, stateパラメータ、CSRF対策、リダイレクト
設問3:〔二つ目と三つ目の問題〕について(1)、(2)に答えよ。
(1)本文中の下線③について、必要最小限の権限を図3中の(ア)〜(エ)から一つ選び、記号で答えよ。
模範解答
(エ)
解説
解答の論理構成
- 要求する権限は、Sサービスが Tサービスから何を取得したいかで決まります。図1には
「Sサービス:Tサービスでのアカウント名を要求する.」
と明記されています。 - 図2のシーケンスでも、(け)「アカウント名の要求」→(こ)「アカウント名」という通信しか行っていません。
- したがって、必要最小限の権限は「利用者のアカウント名、電子メールアドレスなど登録情報を取得する権限」です。これは図3の
「(エ) 利用者のアカウント名、電子メールアドレスなど登録情報を取得する権限」
に該当します。 - (ア)〜(ウ)は“いいね”送信や投稿代行など、Sサービスの機能要件に含まれていない行為を許可してしまうため過剰権限になります。
- 以上より、下線③の解答は (エ) であると導かれます。
誤りやすいポイント
- 「今後使うかもしれないので全権限を要求する」という本文前半の方針に引きずられ、最小限という条件を読み落とす。
- “ファイル共有サービス=投稿権限が必要”と早合点し、(ウ) を選んでしまう。
- “メッセージ機能があるから (イ) が要る”と考えるが、Tサービス経由でメッセージを送る仕様ではない。
- 図4の攻撃シナリオを気にするあまり、権限とは無関係の state パラメタ対策と混同する。
FAQ
Q: 必要最小限の権限を選ぶと後で機能追加したくなった場合はどうしますか?
A: 追加機能が決まった時点で OAuth の再同意を促し、新たなスコープを要求します。最初から過大な権限を与えないのが安全です。
A: 追加機能が決まった時点で OAuth の再同意を促し、新たなスコープを要求します。最初から過大な権限を与えないのが安全です。
Q: 図3の (エ) にはメールアドレス取得も含まれていますが、アカウント名だけ欲しい時でも選んで大丈夫ですか?
A: 権限は束になっていることが多く、アカウント名取得が (エ) にまとめられている以上、(エ) を選択する以外に方法がありません。取得した情報のうち必要なものだけを利用すれば問題ありません。
A: 権限は束になっていることが多く、アカウント名取得が (エ) にまとめられている以上、(エ) を選択する以外に方法がありません。取得した情報のうち必要なものだけを利用すれば問題ありません。
Q: “最小限”の判断基準はありますか?
A: サービス要件との対応関係で決めます。今回の要件は「Tサービスのアカウント名で S会員を識別する」だけなので、プロフィール取得に相当する (エ) が唯一の必須権限です。
A: サービス要件との対応関係で決めます。今回の要件は「Tサービスのアカウント名で S会員を識別する」だけなので、プロフィール取得に相当する (エ) が唯一の必須権限です。
関連キーワード: OAuth, Authorization Code Grant, アクセストークン、スコープ、プロファイル情報
設問3:〔二つ目と三つ目の問題〕について(1)、(2)に答えよ。
(2)本文中の下線④に該当するS会員を、35字以内で述べよ。
模範解答
S認証モジュールに利用者IDとパスワードを登録していないS会員
解説
解答の論理構成
- 問題文の前提
- 改修前は「利用者IDとパスワードを用いて利用者認証する」S認証モジュールだけで全 S 会員を認証していました。
- 改修後は「既存のS会員は対象とせず、新規登録のS会員だけを対象」として T サービスとの ID 連携を導入し、「S認証モジュールを用いないS会員の登録」を実現します。
- 三つ目の問題への対応方針
- 「TサービスとのID連携を一時的に停止し、S認証モジュールだけで認証することにした」と記載されています。
- 停止時に利用できなくなる利用者
- 停止後は S 認証モジュールでしか認証を行わないため、S 認証モジュールに情報をもたない利用者はログインできません。
- その利用者とは、改修後に「S認証モジュールを用いない」方式で新規登録された S 会員です。
- したがって下線④が示すのは「S認証モジュールに利用者IDとパスワードを登録していないS会員」となります。
誤りやすいポイント
- 既存会員と新規会員を取り違える
既存会員は従来どおり S 認証モジュールに情報が残っているため影響を受けません。 - 「Tサービスを利用しているすべてのS会員」と答えてしまう
既存会員が後から T サービスを併用し始めても、パスワードが残っていればログイン可能です。 - 「多要素認証を設定していないS会員」と誤読する
問題の論点は多要素認証の有無ではなく、S 認証モジュールへの登録有無です。
FAQ
Q: 代替策として考えられる対応は何ですか?
A: 一時的にパスワード登録用の緊急フォームを用意し、T サービス停止期間だけ S 認証モジュールで認証できるようにする方法などが考えられます。
A: 一時的にパスワード登録用の緊急フォームを用意し、T サービス停止期間だけ S 認証モジュールで認証できるようにする方法などが考えられます。
Q: 既存会員が T サービス連携を設定している場合も影響はありませんか?
A: はい。既存会員は S 認証モジュールに利用者IDとパスワードが残っているため、T サービスを停止してもログイン可能です。
A: はい。既存会員は S 認証モジュールに利用者IDとパスワードが残っているため、T サービスを停止してもログイン可能です。
Q: 今回のように外部サービスに障害が起きた際、最優先で確認すべきことは?
A: 認証経路が単一障害点になっていないか、代替手段が確保されているかを確認することです。
A: 認証経路が単一障害点になっていないか、代替手段が確保されているかを確認することです。
関連キーワード: OAuth, アクセストークン、ID連携、最小権限、多要素認証
設問4:
本文中の下線⑤について、Sサービスは、Tサービスと連携して、どのように利用者認証を実現しているか。実現の方法を50字以内で具体的に述べよ。
模範解答
Tサービスで認証されたS会員のT-IDが、Sサービス内に登録されていることを確認する。
解説
解答の論理構成
- 改修方針
問題文は「今回の改修では、OAuthのAuthorization Code Grantを採用する。」と述べています。OAuthでは、連携先(ここではSサービス)がアクセストークンを取得し、APIを呼び出して利用者の識別子を得るのが一般的です。 - 直接認証しないという前提
さらに本文には「Sサービスは利用者を直接認証していない」と明記されており、Sサービス側にパスワード等は存在しません。したがって、Tサービスが発行する利用者識別情報だけが頼りになります。 - 利用者識別子としての「T-ID」
模範解答が示すとおり、Tサービスのアカウント名は「T-ID」と呼ばれています。Sサービスは初回登録時にこの「T-ID」を自システムに保存しておきます。 - 認証の成立条件
利用者が再度アクセスすると、OAuthフローで得たアクセストークンを用いてSサービスがTサービスへ照会し、同一の「T-ID」を取得します。保存済みの「T-ID」と一致すれば、その利用者は「Tサービスで認証されたS会員」であると判断できます。 - 結論
以上より、Sサービスは「Tサービスで認証されたS会員のT-IDが、Sサービス内に登録されていることを確認する」ことで利用者認証を実現しています。
誤りやすいポイント
- アクセストークンを得ただけで認証が終わると誤解し、T-IDとの突き合わせを実装し忘れる。
- Tサービスのメールアドレスや他属性で確認しても同一性は保証されると考えてしまう(アカウント名は変更不能という条件を見落とす)。
- OAuthとOpenID Connectを混同し、「IDトークン」がないのに同一人物保証が得られると思い込む。
FAQ
Q: アクセストークンを保存しておけばT-ID照合は不要ですか?
A: アクセストークンは期限付きであり、本人の識別子ではありません。毎回Tサービスから取得した「T-ID」とSサービス内の登録値を照合する必要があります。
A: アクセストークンは期限付きであり、本人の識別子ではありません。毎回Tサービスから取得した「T-ID」とSサービス内の登録値を照合する必要があります。
Q: Tサービスが障害で使えなくなった場合、この認証方式はどうなりますか?
A: 問題文にあるとおり「TサービスとのID連携を一時的に停止し、S認証モジュールだけで認証」する運用を決めています。
A: 問題文にあるとおり「TサービスとのID連携を一時的に停止し、S認証モジュールだけで認証」する運用を決めています。
Q: 「T-ID」は変更できないとありますが、その理由は何ですか?
A: 変更可能にすると、第三者が以前の「T-ID」を取得したときに誤認証が発生する恐れがあるため、プラットフォーム設計上固定値になっています。
A: 変更可能にすると、第三者が以前の「T-ID」を取得したときに誤認証が発生する恐れがあるため、プラットフォーム設計上固定値になっています。
関連キーワード: OAuth, アクセストークン、アカウント名、ID連携、多要素認証


