📜

Microsoft Graph を使って Azure AD のアプリケーションのアクセス許可の一覧を取得する

に公開

はじめに

Microsoft Graph の beta バージョンでは Azure AD のサービス プリンシパルおよび OAuth2 のアクセス許可に対する操作が可能になっています。これにより、たとえば組織でどのアプリケーションがアクセス許可されているかを一覧で取得したり、アクセス許可の追加や削除を自動化できるようになりました。今回は、組織のアプリケーションのアクセス許可の一覧を取得する方法を紹介します。

事前準備

Azure AD に新しいアプリケーションを登録します。Microsoft Graph に対して Directory.Read.All および User.Read.All アプリケーションのアクセス許可を付与します。

サンプル コード

https://github.com/karamem0/samples/tree/main/microsoft-graph-oauth2-permission-grants

実行手順

/oAuth2PermissionGrants のリクエストは ID しか返しません。名前を取得するには ID をキーに /servicePrincipals/{id}/users/{id} を呼び出す必要があります。

実行結果

実行すると以下のように結果が表示されます。ユーザーとして同意している場合はユーザー情報が含まれ、組織として同意している場合はユーザー情報が含まれません。同じアプリケーションでもアクセス許可の付与先のリソース ID が異なる場合は別のレコードとして取得されます。なお、クライアント ID やリソース ID はアプリケーション ID ではなくオブジェクト ID になるため注意が必要です。Azure ポータルの エンタープライズ アプリケーション ではオブジェクト ID で検索できないため、その点は少し不便です。

ClientId     : eaa3382b-3519-4a6a-9e54-c659292ed5ac
ClientName   : SharePoint Service Module for PowerShell Core
ResourceId   : 11721932-6e2d-43bf-af73-81bb24705aa8
ResourceName : Office 365 SharePoint Online
UserId       :
UserName     :
Scope        : AllSites.FullControl TermStore.ReadWrite.All User.Read.All

ClientId     : eaa3382b-3519-4a6a-9e54-c659292ed5ac
ClientName   : SharePoint Service Module for PowerShell Core
ResourceId   : aa466d19-3e79-47c1-b3c1-a271b3ddbceb
ResourceName : Microsoft Graph
UserId       :
UserName     :
Scope        : offline_access

ClientId     : 40808e79-5e1e-4735-8aa8-2bd7bf361988
ClientName   : Graph explorer
ResourceId   : aa466d19-3e79-47c1-b3c1-a271b3ddbceb
ResourceName : Microsoft Graph
UserId       : 4b34f1e2-0c77-4fbd-a8cf-94a4606021ee
UserName     : Takashi Shinohara
Scope        : openid profile User.ReadWrite User.ReadBasic.All Sites.ReadWrite.All Contacts.ReadWrite People.Read Notes.ReadWrite.All Tasks.ReadWrite Mail.ReadWrite Files.ReadWrite.All Calendars.ReadWrite Directory.ReadWrite.All

おわりに

Power Automate の承認フローと組み合わせることでアクセス許可の同意を自動化できます。組織として同意する操作はグローバル管理者のみが実行できますが、アプリケーションのアクセス許可であればユーザーに関係なく同意できるため、非常に便利になると考えられます。

Discussion