委任されたアクセスについて
ユーザーがアプリにサインインし、アプリを使用して Microsoft Graph などの他のリソースにアクセスするときには、まず、ユーザーの代わりにアプリから、このリソースにアクセスするためのアクセス許可を要求する必要があります。 この一般的なシナリオは、委任されたアクセスと呼ばれます。
委任されたアクセスを使用する必要がある理由
ユーザーはクラウド サービスから自分のデータにアクセスするために、異なるアプリケーションを使用することがよくあります。 たとえば、OneDrive に格納されているファイルを、お気に入りの PDF リーダー アプリケーションを使用して表示したい場合があります。 もう 1 つの例は、要求のレビュー担当者を簡単に選択できるように同僚に関する共有情報を取得する場合がある、会社の基幹業務アプリケーションが挙げられます。 そうした場合、クライアント アプリケーション、PDF リーダー、または会社の要求承認ツールが、アプリケーションにサインインしたユーザーの代わりにこのデータにアクセスすることの承認を受ける必要があります。
サインインしているユーザーが、アクセスできる自分自身のリソースやリソースを操作できるようにするときは必ず、委任されたアクセスを使用します。 組織全体のポリシーを設定する管理者であっても、受信トレイのメールを削除するユーザーであっても、ユーザー アクションを伴うすべてのシナリオで、委任されたアクセスを使用する必要があります。
その一方、委任されたアクセスは、自動化など、サインインしたユーザーがいない状態で実行する必要があるシナリオには、通常は適さない選択肢です。 また、データ損失防止やバックアップなど、多くのユーザーのリソースにアクセスする必要のあるシナリオには適さない選択肢である場合があります。 これらの種類の操作には、アプリケーション専用アクセスの使用を検討してください。
クライアント アプリとしてのスコープの要求
アクセスするリソース アプリについての特定のスコープ、またはスコープのセットを付与するように、アプリからユーザーに依頼する必要があります。 スコープは、委任されたアクセス許可とも呼ばれます。 これらのスコープは、ユーザーの代わりにアプリで実行したいリソースや操作について記述するものです。 たとえば、最近受信したメール メッセージやチャット メッセージの一覧をアプリで表示する場合は、Microsoft Graph の Mail.Read
スコープと Chat.Read
スコープに同意するようユーザーに求めることができます。
アプリからスコープを要求されたら、ユーザーまたは管理者が、要求されたアクセスを付与する必要があります。 Outlook.com や Xbox Live のアカウントなど、Microsoft アカウントを持っているコンシューマー ユーザーは、いつでも自分自身のためにスコープを付与できます。 Microsoft Entra アカウントを持っている組織のユーザーは、組織の設定に応じて、スコープを付与できる場合とできない場合があります。 組織のユーザーがスコープに直接同意できない場合、ユーザーが組織の管理者に、同意するよう依頼する必要があります。
常に最小限の特権の原則に従ってください。アプリで必要でないスコープは要求しないでください。 この原則に従えば、アプリが侵害された場合のセキュリティ リスクを限定するのに役立ち、管理者がアプリにアクセスを付与しやすくなります。 たとえば、アプリで必要なのはユーザーが属するチャットを一覧表示することだけで、チャット メッセージ自体を表示する必要がない場合は、Microsoft Graph のスコープとして Chat.Read
ではなく、より制限の多い Chat.ReadBasic
を要求する必要があります。 openID スコープの詳細については、OpenID スコープに関するページを参照してください。
リソース サービス用のスコープの設計と発行
API を構築しようとしていて、委任されたアクセスをユーザーに代わって許可したい場合は、他のアプリから要求できるスコープを作成する必要があります。 これらのスコープでは、クライアントから使用できるアクションまたはリソースを記述する必要があります。 スコープの設計時には、開発者のシナリオを考慮に入れる必要があります。
委任されたアクセスはどのように機能するか
委任されたアクセスについて最も重要なのは、クライアント アプリとサインインしているユーザーの両方が適切に承認される必要があることです。 スコープの付与では不十分です。 クライアント アプリに適切なスコープがないか、ユーザーがリソースの読み取りまたは変更のために十分な権限を持っていないか、どちらの場合も呼び出しが失敗します。
- クライアント アプリの承認 - クライアント アプリの承認は、スコープを付与することで行われます。 ユーザーまたは管理者が、何らかのリソースにアクセスするためのスコープをクライアント アプリに付与すると、その許可は Microsoft Entra ID に記録されます。 適切なユーザーの代わりにリソースにアクセスするためにクライアントによって要求される、委任されたすべてのアクセス トークンの
scp
要求には、それらのスコープの要求値が含まれます。 リソース アプリではこの要求を調べて、その呼び出しの正しいスコープがクライアント アプリに付与されているかどうかを特定します。 - ユーザーの承認 - ユーザーの承認は、呼び出そうとしているリソースによって行われます。 リソース アプリでは、ユーザー承認のために 1 つ以上のシステムを使用できます。ロールベースのアクセス制御、所有権/メンバーシップ関係、アクセス制御リスト、その他の確認などです。 たとえば Microsoft Entra ID では、組織のアプリケーションを削除することをユーザーに許可する前に、そのユーザーがアプリの管理ロールまたは一般管理者ロールに割り当てられていることを確認します。しかしまた、すべてのユーザーが、自分が所有するアプリケーションを削除できます。 同様に、SharePoint Online サービスでは、ファイルを開くことをユーザーに許可する前に、そのユーザーがファイルに対する適切な所有者または閲覧者の権限を持っていることを確認します。
委任されたアクセスの例 - Microsoft Graph から OneDrive
次の例を確認してください。
Alice は、クライアント アプリを使用して、リソース API の Microsoft Graph によって保護されているファイルを開こうとしています。 ユーザーの承認については、OneDrive サービスによって、そのファイルが Alice のドライブに格納されているかどうかが調べられます。 別のユーザーのドライブに格納されている場合、Alice には他のユーザーのドライブを読み取る権限がないため、Alice の要求は未承認として OneDrive に拒否されます。
クライアント アプリの承認については、呼び出しを行うクライアントに、サインインしているユーザーの代わりの Files.Read
スコープが付与されているかどうかが、OneDrive によって調べられます。 この場合、サインインしているユーザーは Alice です。 Alice のためにアプリに Files.Read
が付与されていない場合、この要求も OneDrive によって失敗とされます。
GET /drives/{id}/files/{id} | クライアント アプリに Alice の Files.Read スコープが付与された |
クライアント アプリに Alice の Files.Read スコープが付与されなかった |
---|---|---|
ドキュメントは Alice の OneDrive にあります。 | 200 - アクセスが付与されます。 | 403 - 承認されません。 Alice (またはその管理者) は、ファイルの読み取りをこのクライアントに許可していません。 |
ドキュメントは別のユーザーの OneDrive にあります*。 | 403 - 承認されません。 Alice にはこのファイルを読み取る権限がありません。 クライアントに Files.Read が付与されている場合でも、Alice のために操作する場合は拒否される必要があります。 |
403 - 承認されません。 Alice にはこのファイルを読み取る権限がありません。また、クライアントには、Alice がアクセス権を持っているファイルの読み取りも許可されません。 |
示した例は、委任された承認の例を示すために簡略化されています。 運用中の OneDrive サービスでは、共有ファイルなど、他の多くのアクセス シナリオがサポートされています。