からめもぶろぐ。

俺たちは雰囲気で OAuth をやっている

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

はてなブログの不具合により画像が貼り付けられない現象が発生しています。そのためわかりにくい内容となってしまっていることをご了承ください。不具合が解消しましたらスクリーン ショットを更新します。

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

事前準備

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

サンプル コード

github.com

/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 の承認フローと組み合わせるとアクセス許可の同意を自動化できます。組織として同意するのはグローバル管理者でしかできない操作ですが、アプリケーションのアクセス許可であればユーザーに関係なく同意ができるはずなので、かなり便利にになるのではないかと思います。

SPFxCalendar 1.2.0 を公開しました

SPFxCalendar 1.2.0 を公開しました。

SPFxCalendar はモダン UI で予定表リストをカレンダー表示するための Web パーツです。

github.com

繰り返しイベントに対応しました。一言でいうとそれだけですが結構苦労しています。あと特定の環境でイベントが表示されない不具合を修正しています。

SPFxCalendar 1.0.0 を公開しました

SharePoint の予定表リストにはカレンダー表示できるビューが存在しますが、モダン UI では対応していません。標準でも予定表をカード形式で表示する Web パーツはあるのですが、カレンダー表示に対応していないのは不便なので、SharePoint Framework で作ってみました。

github.com

[Releases] に .sppkg ファイルがありますのでそのままご利用いただけます。

SPClientCore 3.4.0 を公開しました

SPClientCore 3.4.0 を公開しました。

SPClientCore は PowerShell Core 向けの SharePoint Online 管理モジュールです。

www.powershellgallery.com

ドキュメント ライブラリおよび共有リンクに関するコマンドレットを追加しました。
提供されているコマンドレットの数は 236 になりました。