ことの経緯は2021年の後半あたりから。気が付くと私が使っている Microsoft 365 テナントの1つでSharePoint 管理センターの API アクセスページが正常に表示されなくなる問題が起きていることに気が付きました。ここは SharePoint Framework で開発をする際に Microsoft Graph API を利用するときに使う大事な場所です。
エラーのメッセージは次の通り。
「Could not retrieve Global Service Principal ID Error: Error: {}」
GUI がだめなら PowerShell から試してみようとアクセスするのですが「 Directory.AccessAsUser.All の OAuth アクセス許可が見つかりませんでした」というエラーメッセージが表示され、こちらからもアクセスできません。
まず、アクセス許可を解決しないとどうにもならないのですが、なにをどうしたらよいものか。
色々と調べてみると同じような状況にあっている人が世界中に何人かいることがわかりましたが、解決できた人もいればそのままだったり。さて、同じような問題を抱えている方の多くがたどり着くのが下記の記事のようです。
残念ながらこの記事とは現象が異なっていたので、この方法では解決しなかったのですが多くのヒントを得ることがで来ました。
SharePoint 管理センターの APIアクセスのページと大きく関わりがあるのが Azure AD 側のエンタープライズアプリケーションであり、次の2つが関わってきます。
- SharePoint Online Client Extensibility Web Application Principal
- SharePoint Online Client Extensibility Web Application Principal Helper
ちなみに、この2つのアプリは SharePoint 管理センターの API アクセスページにアクセスする際に、初回に基本的に自動生成されるもので本来は何も設定は必要ありません。
ということでこの2つにターゲットを絞りました。まず末尾に Helper とついているアプリを削除して、自動的に再作成するのを待ってみましたがこれでも状況は変わらず。
幸い、正常に動作している別のテナントが手元に3つほどあったのでこれと徹底的に比較しようと。でまずは、AccessAsUser.All を解決する必要があります。それぞれで API のアクセス許可の設定を比較してみます。すると、末尾に Helper とついている方がアクセス許可が全く構成されていません。
ということで、このアプリのマニフェストを見てみるとエラーのあるアプリでは下記の部分がすっかり抜け落ちている。これを書き足すと正常に戻りました。
この赤枠部分の signInAudience 属性に "AzureADMyOrg" という値が格納されていますが、これによって、現在のアプリケーションでサポートされるアカウントが決まります。
Azure Active Directory のアプリ マニフェストについて - Microsoft identity platform | Microsoft Docs
以上。なぜ、こうした状況になったのかは不明ですが、私の環境では何とかエラーを解決したので、この記事を共有することにしました。
同じ状況が発生する頻度は低いでしょうが、困っている人がいるかもしれない。もちろん、まったく同じ原因ではないかもしれないし問題解決できないケースもあるでしょうが、一縷の望みを託しておこうと。
参考になれば幸いです。
大変参考になりました。ありがとうございます。