OpenID Connect認証後の動きをGraphで確認

以前のエントリー(ASP.NET Core WebアプリでOpenID Connect認証の動きを確認)にて
MicrosoftのオープンIDプロバイダーを使用したOpenID Connectによるログイン動作を確認することが出来たと思います。
今回は実際の利用イメージに近づけられるように、OpenID Connect認証後に
Microsoft 365アカウントの操作を行えるようなWebアプリを試してみたいと思います。
事前準備
・Azureテナント・Microsoft 365テナント
・Visual Studio (事前に開発環境にインストールしておきます。)
※今回は2019を使用しています。
サンプルの実行
① 前回のエントリーを参考にAzureADにアプリケーションを登録します。この際に[アプリケーション (クライアント)]ID、[ディレクトリ (テナント) ID]をメモしておきます。
② [証明書とシークレット]-[新しいクライアント シークレット]からクライアントシークレットを作成し、[値]をメモしておきます。

③ githubからVisual Studioに下記のサンプルをダウンロードします。
【OpenID Connectを利用したGraph APIのサンプル】
https://github.com/Azure-Samples/active-directory-aspnetcore-webapp-openidconnect-v2/tree/master/2-WebApp-graph-user/2-1-Call-MSGraph
④ ダウンロードしたファイルの内、[AspnetCoreWebApp-calls-Microsoft-Graph.sln]をVisual Studio 2019で開き、[appsettings.json]の以下を修正します。
(1) Domain:Azureテナントのドメイン名
(2) TenantId:①でメモした[ディレクトリ (テナント) ID]
(3) ClientId:①でメモした[アプリケーション (クライアント)]ID
(4) ClientSecret:②でメモしたクライアントシークレットの[値]

⑤ Visual Studioからアプリを実行します。
サインイン画面が表示されますので本アプリを登録したテナントのユーザID、パスを入力します。

⑥ アクセス許可の要求画面が表示されますので、[承諾]を選択します。

⑦ ログインできました。

⑧ [Profile]を選択するとログインユーザーの属性値を確認することが出来ます。

アプリの権限
ログインユーザーの属性値はMicrosoft Graph APIを利用して取得しています。何も設定していないのにAzure ADにアプリを登録しただけで属性値を取得できるのは何故でしょうか。
これはアプリの登録時に自動的にGraphに対するRead権限を付与しているためです。

また、⑥の手順にてユーザー側に「Read権限を与えるけど大丈夫?」と聞いています。
勝手に権限が行使されないようにこのようなやり取りが行われているのですね。
では、属性値を更新したい場合はどのようにすれば良いでしょうか?
試しにGraphで属性値(MobilePhone)が更新出来るようにサンプルコードを修正しました。

実行すると、エラーが発生します。
これはRead権限しかないため正しい動作となります。

そこでReadWrite権限を付与すると、

エラーなしで実行され、属性値が更新されます。

最後に
OpenID Connectは認証処理を低コストで実現可能な方式となりますが、ただ強い権限を付与するのではなく、アプリケーションの要件に沿った権限を付与することがポイントとなりそうです。
弊社ではMicrosoft Identity ManagerによるID統合管理を行っています。昨今Azure ADや3rdpartyのクラウド連携の案件も増えてきました。OAuth、SAML、OpenID ConnectはSSOソリューションでよく使われており、今後ID管理案件にも深く絡んでくると思います。
QESではこのような検証を行うことで、よりお客様のニーズに対応できる技術を身に付けております。
私共が提供するサービス・ソリューションにつきましてはこちらに掲載しております。
システム開発・構築でお困りの問題や弊社が提供するサービス・ソリューションにご興味を抱かれましたら、是非一度お問い合わせください。
※このブログで参照されている、Microsoft、 Windows、Microsoft Azure、その他のマイクロソフト製品およびサービスは、米国およびその他の国におけるマイクロソフトの商標または登録商 標です。