はじめに
※ この投稿は以下の記事の続きです。
Graph Explorer からユーザー委任権限で Graph API を実行するためには、アクセス許可の付与が必要です。
この際に、一部のアクセス許可については、管理者の同意が必要となります。Graph API のアクセス許可を付与する際の、管理者の同意について紹介しています。
4. チームにメンバーを追加する
3. チームを作成する で作成したチームに、Graph API でチームメンバーを追加してみます。
以下の [チームにメンバーを追加する] Graph API を使用します。
(参考:チームにメンバーを追加する)
https://learn.microsoft.com/ja-jp/graph/api/team-post-members?view=graph-rest-1.0&tabs=http
4.1 URL の変更
Graph API の公開情報の HTTP 要求 を確認すると、以下のように記載されています。
HTTP 要求
POST /teams/{team-id}/members
"{team-id}" と記載されているところは、チームメンバーを追加したチームの ID に置き換える必要があります。
今回のように、特定のデータに対して Graph API で操作を行う場合には、URL の中で対象となるデータの ID をし指定します。
チーム ID の確認
作成したチームの ID を Graph API で確認してみます。
2. チームの一覧情報を取得する で使用した、チームを一覧表示する Graph API を使用します。
Graph API では、フィルタ条件 ($filter) を指定して、取得する結果をキーワードで絞り込むことができます。
例えば、"テストチーム01" という名前のチームの情報を取得したい場合には、URL の最後に以下のような条件を追加します。
https://graph.microsoft.com/v1.0/teams?$filter=startswith(displayName,'テストチーム01')
[Run query] から実行すると、フィルタ条件で指定した名前のチームの情報が取得されます。[Response preview] の "id" の値がチーム ID です。
{team-id} を取得した ID で置き換えると、URL は以下のようになります。
POST /teams/d4923767-ea0d-4168-9422-108464d47b6d/members
(参考:フィルター クエリ 演算子を使用した例)
https://learn.microsoft.com/ja-jp/graph/filter-query-parameter?tabs=http#examples-using-the-filter-query-operator
フィルタ条件をサポートしていない Graph API もあります。各 Graph API がフィルタ条件をサポートしているかどうかは、公開情報の オプションのクエリ パラメーター セクションに記載されています。
4.2. 送信データの設定
次に、3.2 送信データの設定と同じように、チームに追加するメンバーを送信データで指定します。
公開情報に記載されている例を確認します。
(参考:例 1: チームにメンバーを追加する)
https://learn.microsoft.com/ja-jp/graph/api/team-post-members?view=graph-rest-1.0&tabs=http#example-1-add-a-member-to-a-team
{
"@odata.type": "#microsoft.graph.aadUserConversationMember",
"roles": ["owner"],
"user@odata.bind": "https://graph.microsoft.com/v1.0/users('8b081ef6-4792-4def-b2c9-c363a1bf41d5')"
}
設定箇所 | 意味 |
---|---|
roles | 追加するユーザーのロール 所有者 (owner) またはメンバー (member) |
user@odata.bind | 追加するユーザーの ID |
追加するユーザーの ID は "https://graph.microsoft.com/v1.0/users('xxx')" の 'xxx' で指定します。
ユーザー ID の確認
チーム ID と同様に、ユーザー一覧を取得する Graph API でフィルタ条件を使用して特定のユーザーを検索します。
(参考:ユーザーを一覧表示する)
https://learn.microsoft.com/ja-jp/graph/api/user-list?view=graph-rest-1.0&tabs=http
https://graph.microsoft.com/v1.0/users?$filter=startswith(displayName,'テスト ユーザー02')
取得した ユーザー ID で置き換えます。今回は "roles" を "member" にしてメンバーとして追加してみます。
- 送信データ (Request Body)
{
"@odata.type": "#microsoft.graph.aadUserConversationMember",
"roles": ["member"],
"user@odata.bind": "https://graph.microsoft.com/v1.0/users('0963c34e-f94e-49cf-bab8-b6b620fdb66f')"
}
Graph Explorer で URL と合わせて送信データを以下のように入力します。
- URL
POST https://graph.microsoft.com/v1.0/teams/d4923767-ea0d-4168-9422-108464d47b6d/members
4.3 アクセス許可の付与 (管理者の同意)
次に、3.3 アクセス許可の付与 と同様に [Modify Permissions] タブから "TeamMember.ReadWrite.All" アクセス許可を付与します。
しかし、一般ユーザーでログインしていると、[Consent] ボタンをクリックした際に以下のようなダイアログが表示され、アクセスを許可することができません。
[Modify Permissions] タブをよく見ると、[Admin consent required] (管理者の同意が必要) が "Yes" となっています。このようなアクセス権限は一般ユーザーでは許可することができません。
管理者の同意を行うために必要な管理者ロール
このようなアクセス許可は、以下のような管理者ロールを割り当てられている管理者ユーザーのみ、許可することができます。
- 特権ロール管理者
- クラウドアプリケーション管理者
- アプリケーション管理者
上記のようなロールが割り当てられているユーザーで Graph Explorer にサインインして、同様に [Consent] ボタンをクリックすると、アクセスを許可するダイアログが表示されます。
[組織の代理として同意する] に✅すると、組織内の一般ユーザーもこのアクセス許可を使用して Graph API を実行することができるようになります。
一般ユーザーが実行することを許可したくない場合には [組織の代理として同意する] を✅しないようにします。
アクセス許可を付与したら、[Run query] をクリックします。
Teams クライアントから確認すると、指定したユーザーがチームにメンバーとして追加されています。
4.4 補足
管理者の同意を取り消す方法
Graph Explorer から管理者が同意したアクセス許可は、Entra ID 管理センターから取り消すことができます。
- Entra ID 管理センターから [アプリケーション] - [エンタープライズアプリケーション] - [Graph Explorer] をクリックします
-
[アクセス許可] - [管理者の同意] タブから取り消したいアクセス許可の右側 […] より [アクセス許可の取り消し] をクリックします
- 確認ダイアログが表示され、[はい、取り消します] をクリックするとアクセス許可を取り消すことができます
すべてのアクセス許可で管理者の同意を必要とする方法
既定では [Admin consent required] が "No" となっているアクセス許可は管理者の同意なくユーザーが利用できます。
以下の手順で、すべてのアクセス許可について管理者の同意が必要にできます。
- Entra 管理センターから [アプリケーション] - [エンタープライズアプリケーション] - [同意とアクセス許可] をクリックします
-
[ユーザーの同意設定] で [ユーザーの同意を許可しない] を選択し、[保存] します
この設定を行うと、すべてのアクセス許可で管理者の同意が必要となります。ユーザーが管理者の同意していないアクセス許可を利用しようとすると、以下のダイアログが表示されます。
(参考:ユーザーがアプリケーションに同意する方法を構成する)
https://learn.microsoft.com/ja-jp/entra/identity/enterprise-apps/configure-user-consent?pivots=portal