ユーザーなしでアクセスを取得
[アーティクル] 2024/08/28
13 人の共同作成者
フィードバック
この記事の内容
前提条件
手順 1: Microsoft Graph のアクセス許可を構成する
手順 2: 管理者の同意を要求する
手順 3: アクセス トークンを要求する
手順 4: アクセス トークンを使用して Microsoft Graph を呼び出す
サポートされているアプリのシナリオとリソース
Microsoft 認証ライブラリ (MSAL) を使用する
関連コンテンツ
さらに 4 個を表示
Microsoft Graph を呼び出すには、アプリがMicrosoft ID プラットフォームからアクセス トークンを取得する必要があります。 このアクセス トークンには、サインインしているユーザーの代わりに Microsoft Graph にアクセスするアプリが承認されているか、独自の ID でアクセスできるかに関する情報が含まれます。 この記事では、アプリが独自の ID (アプリ専用アクセス とも呼ばれます) を使用して Microsoft Graph にアクセス する方法に関するガイダンスを提供します。
この記事では、 OAuth 2.0 クライアント資格情報付与フロー と呼ばれる一般的なフローを使用して、アプリが独自の ID で Microsoft Graph を呼び出すために必要な生の HTTP 要求について詳しく説明します。 または、未加工の HTTP 要求を書き込むのを避け、アクセス トークンを取得して Microsoft Graph を呼び出すのに役立つ Microsoft ビルドまたはサポートされている認証ライブラリを使用することもできます。 詳細については、「 Microsoft 認証ライブラリ (MSAL) を使用する」 を参照してください。
この記事では、クライアント資格情報フローの使用に関する次の手順を実行します。
アプリに対する Microsoft Graph アプリケーションのアクセス許可を構成します。
管理者の同意を要求します。
アクセス トークンを要求します。
アクセス トークンを使用して Microsoft Graph を呼び出します。
この記事の手順に進む前に、次の手順を実行してください。
Microsoft ID プラットフォームの認証と承認の概念について説明します。 詳細については、「 認証と承認の基本 」を参照してください。
アプリをMicrosoft Entra IDに登録します。 詳細については、「アプリケーションをMicrosoft ID プラットフォームに登録する 」を参照してください。 アプリの登録から次の値を保存します。
アプリケーション ID (Microsoft Entra 管理センターのオブジェクト ID と呼ばれます)。
クライアント シークレット (アプリケーション パスワード)、証明書、またはフェデレーション ID 資格情報。
Microsoft Entra IDからトークン応答を受け取るためのアプリのリダイレクト URI。
アプリが管理者の同意を要求する機能を実装している 場合 に管理者の同意応答を受け取るサービスのリダイレクト URI。
Microsoft Graph は、独自の ID で Microsoft Graph を呼び出すアプリの アプリケーションアクセス許可 を公開します。 これらのアクセス許可には常に管理者の同意が必要です。
アプリを登録するときにアプリに必要なアプリケーションのアクセス許可を事前に構成します。 管理者は、organizationにアプリをインストールするときにMicrosoft Entra 管理センター を使用するか、アプリでサインアップ エクスペリエンスを提供して、管理者が構成したアクセス許可に同意できるように、これらのアクセス許可に同意できます。 管理者の同意Microsoft Entra ID記録すると、アプリはもう一度同意を要求しなくてもトークンを要求できます。
Microsoft Entra 管理センターのアプリ登録エクスペリエンスでアプリのアプリケーションのアクセス許可を構成するには、次の手順に従います。
アプリケーションの [API アクセス許可 ] ページで、[ アクセス許可の追加] を選択します。
[Microsoft Graph ] を選択>[アプリケーションのアクセス許可 ] を選択します。
[ アクセス許可の選択 ] ダイアログで、アプリに構成するアクセス許可を選択します。
次のスクリーンショットは、Microsoft Graph のアプリケーションのアクセス許可に対する [アクセス許可の選択] ダイアログ ボックスを示しています。
管理者は、Microsoft Entra 管理センター でアプリに必要なアクセス許可を付与できます。 ただし、Microsoft Entra 管理センターにアクセスできない場合は、Microsoft ID プラットフォーム /adminconsent
エンドポイントを使用して管理者にサインアップ エクスペリエンスを提供できます。
重要
構成済みのアクセス許可を変更する場合は、管理者の同意プロセスも繰り返す必要があります。 アプリ登録ポータルで行われた変更は、特権ロール管理者などの承認された管理者がアプリに再同意するまで反映されません。
// Line breaks are for legibility only.
GET https://login.microsoftonline.com/{tenant}/adminconsent
?client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&state=12345
&redirect_uri=https://localhost/myapp/permissions HTTP/1.1
curl --location --request GET 'https://login.microsoftonline.com/{tenant}/adminconsent?client_id=6731de76-14a6-49ae-97bc-6eba6914391e&redirect_id=https%3A%2F%2Flocalhost%2Fmyapp%2Fpermissions&state=12345'
テーブルを展開する
パラメーター
条件
説明
tenant
必須
アクセス許可を要求するテナント。 値は GUID またはフレンドリ名形式にすることができます。 ユーザーが属しているテナントがわからない場合に、任意のテナントでサインインできるようにする場合は、 common
を使用します。
client_id
必須
Azure アプリ登録ポータル がアプリに割り当てたアプリケーション ID。
redirect_uri
必須
アプリで処理する応答を送信するリダイレクト URI。 ポータルに登録したリダイレクト URI のいずれかと一致する必要があります。 URL でエンコードする必要があり、追加のパス セグメントを含めることができます。
state
推奨
トークン応答にも返される要求に含まれる値。 任意のコンテンツの文字列を指定できます。 状態は、認証要求が発生する前のアプリ内のユーザーの状態に関する情報 (ページやビューなど) をエンコードするために使用されます。
/adminconsent
エンドポイントへの要求では、Microsoft Entra IDは、承認された管理者のみがサインインして要求を完了できることを強制します。 管理者は、アプリ登録ポータルでアプリに対して要求したすべてのアプリケーションアクセス許可を承認するように求められます。
次のスクリーンショットは、管理者に提示Microsoft Entra ID同意ダイアログの例です。
管理者がアプリケーションのアクセス許可を承認した場合、成功応答は次のようになります。
// Line breaks are for legibility only.
https://localhost/myapp/permissions?admin_consent=True&tenant=38d49456-54d4-455d-a8d6-c383c71e0a6d&state=12345#
テーブルを展開する
パラメーター
説明
tenant
アプリケーションに要求されたアクセス許可を GUID 形式で付与したテナント。
state
トークン応答にも返される要求に含まれる値。 任意のコンテンツの文字列を指定できます。 状態は、認証要求が発生する前のアプリ内のユーザーの状態に関する情報 (ページやビューなど) をエンコードするために使用されます。
admin_consent
True に設定 します 。
OAuth 2.0 クライアント資格情報の付与フローでは、アプリの登録時に保存したアプリケーション ID とクライアント シークレットの値を使用して、Microsoft ID プラットフォーム/token
のエンドポイントからアクセス トークンを直接要求します。
トークン要求で scope
パラメーターの値としてhttps://graph.microsoft.com/.default
を渡すことで、構成済みのアクセス許可を指定します。
アクセス トークンを取得するために、 ID プラットフォーム エンドポイントに POST 要求を送信します。 この要求では、クライアントはクライアント シークレットを使用します。
// Line breaks are for legibility only.
POST https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token HTTP/1.1
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
client_id=535fb089-9ff3-47b6-9bfb-4f1264799865
&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default
&client_secret=qWgdYA....L1qKv5bPX
&grant_type=client_credentials
curl --location --request POST 'https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'client_id=535fb089-9ff3-47b6-9bfb-4f1264799865' \
--data-urlencode 'scope=https://graph.microsoft.com/.default' \
--data-urlencode 'client_secret=qWgdYA....L1qKv5bPX' \
--data-urlencode 'grant_type=client_credentials'
テーブルを展開する
パラメーター
条件
説明
tenant
必須
アクセス許可を要求するテナント。 値は GUID またはフレンドリ名形式にすることができます。
client_id
必須
アプリの登録時に Azure アプリ登録ポータル が割り当てたアプリケーション ID。
スコープ
必須
この要求で スコープ パラメーターに渡される値は、必要なリソースの識別子 (アプリ ID URI) で、 .default
サフィックスが付加されている必要があります。 たとえば、Microsoft Graph リソース アプリ ID URI は https://graph.microsoft.com/
です。 したがって、Microsoft Graphの場合、スコープ の値は https://graph.microsoft.com/.default
になります。 この値は、管理者が同意したすべてのアプリレベルのアクセス許可をアクセス トークンに含めるように Microsoft ID プラットフォームのエンドポイントに通知します。
client_secret
必須
アプリ登録ポータルでアプリ用に生成したクライアント シークレット。 URL でエンコードされていることを確認します。
grant_type
必須
client_credentials
である必要があります。
成功応答は、次のようになります。
{
"token_type": "Bearer",
"expires_in": 3599,
"ext_expires_in":3599,
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik1uQ19WWmNBVGZNNXBP..."
}
テーブルを展開する
パラメーター
説明
access_token
要求されたアクセス トークン。 アプリでは、Microsoft Graph の呼び出しでこのトークンを使用できます。
expires_in
アクセス トークンの有効期間 (秒単位)。
ext_expires_in
アクセス トークンの有効期間の延長を示し、トークン発行サービスが応答しない場合の回復性をサポートするために使用されます。
token_type
トークンの種類の値を示します。 Microsoft Entra IDがサポートする型はBearer
のみです。
手順 4: アクセス トークンを使用して Microsoft Graph を呼び出す
アクセス トークンを取得した後、アプリはそれを使用して、アクセス トークンを ベアラー トークンとして HTTP 要求の Authorization ヘッダーにアタッチすることで Microsoft Graph を呼び出します。 次の要求は、テナント内のすべてのユーザーを取得します。 この API を呼び出すには、アプリに User.Read.All アクセス許可が必要です。
GET https://graph.microsoft.com/v1.0/users HTTP/1.1
Authorization: Bearer eyJ0eXAiO ... 0X2tnSQLEANnSPHY0gKcgw
Host: graph.microsoft.com
curl --location --request GET 'https://graph.microsoft.com/v1.0/users' \
--header 'Authorization: Bearer eyJ0eXAiO ... 0X2tnSQLEANnSPHY0gKcgw' \
--data ''
成功した応答は次のようになります (一部の応答ヘッダーが削除されました)。
HTTP/1.1 200 OK
Content-Type: application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8
request-id: f45d08c0-6901-473a-90f5-7867287de97f
client-request-id: f45d08c0-6901-473a-90f5-7867287de97f
OData-Version: 4.0
Date: Wed, 26 Apr 2017 19:53:49 GMT
Content-Length: 407
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users",
"value": [
{
"businessPhones": [],
"displayName": "Conf Room Adams",
"givenName": null,
"jobTitle": null,
"mail": "Adams@Contoso.com",
"mobilePhone": null,
"officeLocation": null,
"preferredLanguage": null,
"surname": null,
"userPrincipalName": "Adams@Contoso.com",
"id": "8afc02cb-4d62-4dba-b536-9f6d73e9be26"
},
{
"businessPhones": [
"+1 425 555 0109"
],
"displayName": "Adele Vance",
"givenName": "Adele",
"jobTitle": "Retail Manager",
"mail": "AdeleV@Contoso.com",
"mobilePhone": null,
"officeLocation": "18/2111",
"preferredLanguage": null,
"surname": "Vance",
"userPrincipalName": "AdeleV@Contoso.com",
"id": "59bb3898-0621-4414-ac61-74f9d7201355"
}
]
}
独自の ID で Microsoft Graph を呼び出すアプリは、次の 2 つのカテゴリのいずれかに分類されます。
サインインしたユーザーが存在しないサーバーで実行されるバックグラウンド サービス (デーモン) 。
サインインしているユーザーが存在するが、独自の ID で Microsoft Graph を呼び出すアプリ。 たとえば、ユーザーが持つよりも高い昇格された特権を必要とする機能を使用する場合です。
この記事では、アプリが資格情報としてクライアント シークレットを使用しました。 必要に応じて、証明書またはフェデレーション ID 資格情報を構成できます。
独自の ID で Microsoft Graph を呼び出し、クライアント資格情報フローを使用するアプリの詳細については、「 認証フローとアプリケーション シナリオ: デーモンの名前で Web API を呼び出すデーモン アプリ 」を参照してください。
Microsoft 認証ライブラリ (MSAL) を使用する
この記事では、クライアント資格情報フローを実行するために生の HTTP 要求を手動で作成して発行する場合にのみ必要な低レベルのプロトコルの詳細について説明しました。 運用アプリでは、Microsoft 認証ライブラリ (MSAL) などの Microsoft ビルドまたはサポートされている認証ライブラリ を使用して、セキュリティ トークンを取得し、Microsoft Graph などの保護された Web API を呼び出します。
MSAL およびその他のサポートされている認証ライブラリは、検証、Cookie 処理、トークン キャッシュ、セキュリティで保護された接続などの詳細を処理することで、プロセスを簡略化します。を使用すると、アプリケーションの機能に集中できます。
Microsoft ID プラットフォーム コード サンプル にアクセスして、MSAL を使用してアクセス トークンを取得し、Microsoft Graph を呼び出す方法を確認します。