認証方式について
Microsoft Graph を介してMicrosoft365データにアクセスするためには、インターネットを経由してREST APIにてデータを取得するアプリが正当なアプリであるための認証が必要になります。
プログラムは認証方法によって、アクセスできる範囲が決められ、アクセス許可によって、アクセス可能なデータの種類が決まります。
認証方法とアクセスできる範囲について
Microsoft Graph API を利用してMicrosoft365のデータにアクセスするためには認証が必要になります。
認証には、「アプリケーション認証」と 「ユーザ委任認証」の2種類があります。
それぞれについては以下の表のとおりとなります。
| 認証方式 | 説明 |
|---|---|
| アプリケーション認証 | アカウント情報を持たない認証方法となります。アクセスするデータ範囲は、テナント内のすべてのデータが対象となります。 |
| ユーザ委任認証 | 認証の際に、サインインが求められます。そのサインインしたアカウントがアクセスできる範囲内のデータが対象となります。 |
各認証方法について
「アプリケーション認証」と「ユーザ委任認証」について下に説明します。
アプリケーション認証
アプリケーション認証は、対象範囲はテナント全体が対象となり、アクセス許可で許可されているデータにアクセスが可能となります。
主に、スケジューラーで動作するプログラムやデーモンのようなプログラムなど管理系のプログラムに利用を想定します。
注意点としては、テナント全体のデータが対象となるので、アクセス許可を与えた場合に、対象となるデータがセキュリティの観点から問題がないか検討する必要があると思います。
PowerShellでアプリケーション認証のサンプルになります。
# 事前にEntra管理センターで登録した情報を定義
$ApplicationClientId = '<クライアントID>'
$ApplicationClientSecret = '<クライアント シークレット>'
$TenantId = '<テナントID>'
# クライアントシークレットを利用してセキュア文字列に変換します。
$SecureClientSecret = ConvertTo-SecureString -String $ApplicationClientSecret -AsPlainText -Force
# クライアントIDとクライアント シークレットを使ってPSCredential Object を作成する。
$ClientSecretCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $ApplicationClientId, $SecureClientSecret
# アプリケーション認証でMicrosoft365への認証を行います。
Connect-MgGraph -TenantId $TenantId -ClientSecretCredential $ClientSecretCredential
ユーザ委任認証
ユーザ委任認証は、対象範囲は、認証時に利用したアカウントの範囲が対象となり、アクセス許可で許可されたデータが対象となります。
アクセス許可によって許可されている事が前提となりますが、認証に利用したアカウントが参加しているチームやチャネル、グループチャットなどがデータが対象となります。
この場合、Teamsの管理者アカウントでサインインした場合でも、自信が参加していないチームやチャネルにはアクセスできませんので、その場合は、アプリケーション認証を検討したほうがよいと考えています。
下は、ユーザ委任認証のサンプルになります。下のサンプルでは、アクセス許可 "User.Read.All", "Group.ReadWrite.All" を付与してのサインインになります。
事前にEntra管理センターよりアプリの登録を行い、アクセス許可を設定している場合には、不要となります。
Entra管理センターでの設定については、別途、説明しようと思います。
Connect-MgGraph -Scopes "User.Read.All", "Group.ReadWrite.All"
認証の有効期間(タイムアウト)
一度認証を行っても、有効期限までに更新しないとGraph APIを発行してもエラーになってしまいます。
そのため、認証後、長時間に及ぶ処理がある場合には、トークンを更新する必要があります。
認証期間には2種類あって、実際のアクセスに利用するアクセストークンとアクセストークンの有効期間が切れた場合に再度、アクセストークンを取得するために利用するリフレッシュトークンがあります。
アクセストークンの有効期間は60分
リフレッシュトークンの有効期間は90日となります。
なお、Powershell で Connect-MGGraph コマンドレットでは、内部で自動的にトークンの更新を行っているので、更新作業は不要ですが、他のコマンドレットを利用している場合や他のプログラミング言語でプログラミングしている場合には、注意が必要となります。