はじめに
Microsoft Graphを利用するためには、事前に認証してアクセストークンを発行する必要があります。
今回はMicrosoft Graph PowerShellを使って、利用ケースに応じた認証方法の使い分けを説明します。
アクセスシナリオ
認証方法はアプリがデータにアクセスする方法によって異なります。
- 委任されたアクセス
- サインインしているユーザーに代わって動作するアプリ。
- アプリ専用アクセス
- 独自のIDで動作するアプリ。
引用元:Microsoft Graph の認証と承認の基本方法 - Microsoft Graph | Microsoft Learn
大きな違いは委任されたアクセスはユーザーとアプリの両方の権限が必要なことです。例えば、アプリに予定表を閲覧する権限を与えていても、認証するユーザーが閲覧したい予定表の権限を持っていないと閲覧できません。
アプリ専用アクセスであれば、アプリにのみ権限を付与しておけば、全ユーザーの予定表を閲覧することが可能です。
認証方法
委任認証
まずは一番簡単な、スコープを指定して認証する方法について説明します。こちらは委任されたアクセスに対応します。
下記のコマンドを実行します。
Connect-MgGraph -Scopes "User.Read.All"
サインインダイアログが表示されます。今回は、管理者権限を持つアカウントでサインインします。
アクセス許可の要求が表示された場合は、承認します。
スコープに指定したアクセス許可が管理者の同意が必要だった場合、承認ダイアログが表示されます。必要に応じて"組織の代理として同意する"にチェックを付けて、承諾ボタンを押下してください。
認証が正常に完了したら、Get-Mguserコマンドを使って、ユーザー情報が取得できるか確認してみてください。
なお、今回は管理者アカウントで実行、承諾を行いましたが、あらかじめ管理者が権限を設定しておくことで、一般ユーザーでも利用が可能です。
アプリ認証(クライアント証明書)
サインインダイアログを表示して認証する方法は都度アカウント名とパスワードを手動入力しなければいけないため、スクリプトの自動化を行うことができません。
対応方法として、Azure ADのアプリケーションを登録して、クライアント証明書を使用して認証する方法があります。こちらはアプリ専用アクセスに対応します。
アプリケーションの登録手順は下記の通りです。
1.管理者でAzureポータル(https://portal.azure.com/)にログインします。
2.メニューより「Azure Active Directory」をクリックします。
3.「アプリの登録」から「新規登録」をクリックします。
4.アプリケーションの登録画面で以下を入力して、「登録」をクリックします。
- 名前:任意
- サポートされているアカウントの種類:この組織ディレクトリのみに含まれるアカウント
- リダイレクトURI:Web、テキストボックスは空白
5.概要画面でアプリケーション(クライアント)IDとディレクト(テナント)IDをコピーして、メモしておきます。
6.「APIのアクセス許可」から「アクセス許可の追加」をクリックします。
7.「Micorosoft Graph」を選択し、「アプリケーションの許可」を選択します。
8.「User.Read.All」を選択し、「アクセス許可の追加」をクリックします。
9.「<テナント名>に管理者の同意を与えます」をクリックします。
10.「管理者の同意の確認を与えます」ダイアログの「はい」をクリックします。
11.状態が「<テナント名>に付与されました」と表示されることを確認します。
12.アプリケーションに登録するための証明書を用意します。自己証明書を使用する場合は、PowerShellにて、以下のコマンドで自己証明書の作成とインストールができます。
#証明書の作成 $mycert = New-SelfSignedCertificate -Subject "<証明書のSubject>" ` -CertStoreLocation "<証明書ストア>" -NotAfter <有効期限> ` -KeyExportPolicy Exportable -KeySpec Signature #エクスポート(CERファイル) $mycert | Export-Certificate -FilePath "<配置先パス>" #作成した証明書の拇印 $mycert | Select Thumbprint
例
#証明書の作成 $mycert = New-SelfSignedCertificate -Subject "GraphPowerShellApp" ` -CertStoreLocation "cert:\CurrentUser\My" -NotAfter (Get-Date).AddYears(1) ` -KeyExportPolicy Exportable -KeySpec Signature #エクスポート(CERファイル) $mycert | Export-Certificate -FilePath ".\mycert1.cer" #作成した証明書の拇印 $mycert | Select Thumbprint
13.Azureポータルに戻り、「証明書とシークレット」から「証明書のアップロード」をクリックします。
14.作成した証明書を指定し、「追加」をクリックすします。
15.アプリケーションに証明書が追加されます。
以上でアプリケーションの登録が完了となります。
下記のコマンドを実行して、Micorosoft Graphに接続できることを確認してください。
Connect-MgGraph -Clientid "<クライアントID>" ` -TenantId "<テナントID>" ` -CertificateThumbprint "<証明書の拇印>"
認証が正常に完了したら、Get-Mguserコマンドを使って、ユーザー情報が取得できるか確認してみてください。
アプリ認証(クライアントシークレット)
Connect-MgGraphコマンド自体には用意されていませんが、MSAL認証のモジュールを併用することでクライアントシークレットを使って、認証することも可能です。
まずはAzure ADに登録したアプリケーションに対して、クライアントシークレットを発行しましょう。手順は下記の通りです。
1.管理者でAzureポータル(https://portal.azure.com/)にログインします。
2.メニューより「Azure Active Directory」をクリックします。
3.「アプリの登録」から作成したアプリケーションを選択します。
4.「証明書とシークレット」から「新しいクライアントシークレット」をクリックします。
5.以下の設定を行い、「追加」をクリックします。
- 説明:任意(空白でも問題ありません)
- 有効期限:任意(最大2年間指定可能)
6.生成されたクライアントシークレットの値をコピーして、メモしておきます。
以上でクライアントシークレットの発行は完了です。
次にMSAL認証用のモジュールをインストールします。
Install-Module MSAL.PS
インストールが完了したら、インポートします。
Import-Module MSAL.PS
下記のコマンドを実行して、Micorosoft Graphに接続できることを確認してください。
$clientId = "<クライアントID>" $clientSecret_plain = "<クライアントシークレット>" $clientSecret = ConvertTo-SecureString -String $clientSecret_plain -AsPlainText -Force $tenantId = "<テナントID>" $scope = "https://graph.microsoft.com/.default" #アクセストークン取得(MSAL認証) $oauth = Get-MsalToken -ClientId $clientId -TenantId $tenantId -ClientSecret $clientSecret -Scopes $scope
$accessToken = ConvertTo-SecureString -String $oauth.AccessToken -AsPlainText -Force
#Micorosoft Graph接続
Connect-MgGraph -AccessToken $accessToken
※2024/11/15修正:アクセストークンはSecureStringに変換が必要となった
認証が正常に完了したら、Get-Mguserコマンドを使って、ユーザー情報が取得できるか確認してみてください。