Microsoft Graph を使用してMicrosoft Entra アプリケーションを管理する

Microsoft ID プラットフォームがMicrosoft Entraまたは Microsoft 365 テナントに格納されているデータへのアクセスを承認するには、アプリをMicrosoft Entra IDに登録する必要があります。 この条件は、自分で開発したアプリ、テナントが所有しているアプリ、またはアクティブなサブスクリプションを通じてアクセスするアプリに適用されます。

アプリの多くの設定は、Microsoft Graph を使用してアクセス、更新、または削除できるオブジェクトとして記録されます。 この記事では、Microsoft Graph を使用して、プロパティ、アクセス許可、ロールの割り当てを含むアプリおよびサービス プリンシパル オブジェクトを管理する方法について説明します。

前提条件

API 操作をテストするには、次のリソースと特権が必要です。

  • 作業Microsoft Entraテナント。
  • テナントでアプリケーションを作成および管理できる権限を持つユーザーとして Graph エクスプローラーにサインインします。
  • 操作に対して示されている最小限の特権委任されたアクセス許可を自分に付与します。

アプリケーションをMicrosoft Entra IDに登録する

次の要求では、必要な displayName プロパティのみを指定してアプリを作成します。

最小特権委任アクセス許可: Application.ReadWrite.All

POST https://graph.microsoft.com/v1.0/applications
Content-type: application/json

{
  "displayName": "My application"
}

要求は、 201 Created 応答本文にアプリケーション オブジェクトを含む応答を返します。 アプリケーションには、テナント内のアプリに固有の ID と、Microsoft Entra ID エコシステムでグローバルに一意の appId が割り当てられます。

アプリケーションのサービス プリンシパルを作成する

最小特権委任アクセス許可: Application.ReadWrite.All

POST https://graph.microsoft.com/v1.0/servicePrincipals
Content-type: application/json

{
  "appId": "fc876dd1-6bcb-4304-b9b6-18ddf1526b62"
}

要求は、 201 Created 応答本文のサービス プリンシパル オブジェクトを含む応答を返します。

アプリケーションまたはサービス プリンシパル オブジェクトのアドレス指定

アプリケーションまたはサービス プリンシパルのアドレスは、ID またはその appId で指定できます。ID はオブジェクト ID と呼ばれ、appId はMicrosoft Entra 管理センターのアプリケーション (クライアント) ID と呼ばれます。 これらの構文は、アプリケーションとサービス プリンシパルに対するすべての HTTP CRUD 操作でサポートされます。

アプリケーションまたはサービス プリンシパルの ID でアドレス指定する。

https://graph.microsoft.com/v1.0/applications/{applicationObjectId}
https://graph.microsoft.com/v1.0/servicePrincipals/{servicePrincipalObjectId}

appId によってアプリケーションまたはサービス プリンシパルに対処する。

https://graph.microsoft.com/v1.0/applications(appId='appId')
https://graph.microsoft.com/v1.0/servicePrincipals(appId='appId')

アプリのその他の基本的なプロパティを構成する

最小特権委任アクセス許可: Application.ReadWrite.All

アプリの次の基本的なプロパティを構成します。

  • organizationに分類用のタグを追加します。 また、タグをHideApp使用して、アプリをマイ アプリと Microsoft 365 Launcher から非表示にします。
  • ロゴ、利用規約、プライバシーに関する声明などの基本情報を追加します。
  • アプリケーションに関する連絡先情報を保存する
PATCH https://graph.microsoft.com/v1.0/applications/0d0021e2-eaab-4b9f-a5ad-38c55337d63e/
Content-type: application/json

{
    "tags": [
        "HR",
        "Payroll",
        "HideApp"
    ],
    "info": {
        "logoUrl": "https://cdn.pixabay.com/photo/2016/03/21/23/25/link-1271843_1280.png",
        "marketingUrl": "https://www.contoso.com/app/marketing",
        "privacyStatementUrl": "https://www.contoso.com/app/privacy",
        "supportUrl": "https://www.contoso.com/app/support",
        "termsOfServiceUrl": "https://www.contoso.com/app/termsofservice"
    },
    "web": {
        "homePageUrl": "https://www.contoso.com/",
        "logoutUrl": "https://www.contoso.com/frontchannel_logout",
        "redirectUris": [
            "https://localhost"
        ]
    },
    "serviceManagementReference": "Owners aliases: Finance @ contosofinance@contoso.com; The Phone Company HR consulting @ hronsite@thephone-company.com;"
}

アプリのサインインを割り当てられた ID のみに制限する

最小特権委任アクセス許可: Application.ReadWrite.All

PATCH https://graph.microsoft.com/v1.0/servicePrincipals/89473e09-0737-41a1-a0c3-1418d6908bcd

{
    "appRoleAssignmentRequired": true
}

アプリにアクセス許可を割り当てる

Microsoft Entra 管理センターを使用してアプリにアクセス許可を割り当てることができますが、アプリ オブジェクトの requiredResourceAccess プロパティを更新することで、Microsoft Graph を使用してアクセス許可を割り当てることもできます。 既存のアクセス許可と新しいアクセス許可の両方を渡す必要があります。 新しいアクセス許可のみを渡すと、まだ同意されていない既存のアクセス許可が上書きされ、削除されます。

アクセス許可を割り当てると、アプリに自動的に付与されることはありません。 引き続き、Microsoft Entra 管理センターを使用して管理者の同意を付与する必要があります。 対話型の同意なしでアクセス許可を付与するには、「 プログラムによる API アクセス許可の付与または取り消し」を参照してください。

最小特権委任アクセス許可: Application.ReadWrite.All

PATCH https://graph.microsoft.com/v1.0/applications/581088ba-83c5-4975-b8af-11d2d7a76e98
Content-Type: application/json

{
    "requiredResourceAccess": [
        {
            "resourceAppId": "00000002-0000-0000-c000-000000000000",
            "resourceAccess": [
                {
                    "id": "311a71cc-e848-46a1-bdf8-97ff7156d8e6",
                    "type": "Scope"
                },
                {
                    "id": "3afa6a7d-9b1a-42eb-948e-1650a849e176",
                    "type": "Role"
                }
            ]
        }
    ]
}

アプリ ロールを作成する

アプリケーション オブジェクトにアプリ ロールを作成する

既存のアプリ ロールを保持するには、それらを要求に含めます。 それ以外の場合は、新しいオブジェクトに置き換えられます。

PATCH https://graph.microsoft.com/v1.0/applications/bbd46130-e957-4c38-a116-d4d02afd1057
Content-Type: application/json

{
    "appRoles": [
        {
            "allowedMemberTypes": [
                "User",
                "Application"
            ],
            "description": "Survey.Read",
            "displayName": "Survey.Read",
            "id": "7a9ddfc4-cc8a-48ea-8275-8ecbffffd5a0",
            "isEnabled": false,
            "origin": "Application",
            "value": "Survey.Read"
        }
    ]
}

所有者の管理

所有者のないサービス プリンシパルとサービス プリンシパルを 1 人の所有者で識別する

最小特権委任アクセス許可: Application.ReadWrite.All

この要求では、$count が要求にあるため、ConsistencyLevel ヘッダーを eventual に設定する必要があります。 ConsistencyLevel$countの使用の詳細については、「ディレクトリ オブジェクトに対する高度なクエリ機能」を参照してください。

この要求は、フィルター条件に一致するアプリの数も返します。

GET https://graph.microsoft.com/v1.0/servicePrincipals?$filter=owners/$count eq 0 or owners/$count eq 1&$count=true
ConsistencyLevel: eventual

アプリに所有者を割り当てる

最小特権委任アクセス許可: Application.ReadWrite.All

次の要求では、 8afc02cb-4d62-4dba-b536-9f6d73e9be26 は、ユーザーまたはサービス プリンシパルのオブジェクト ID です。

POST https://graph.microsoft.com/v1.0/applications/7b45cf6d-9083-4eb2-92c4-a7e090f1fc40/owners/$ref
Content-Type: application/json

{
    "@odata.id": "https://graph.microsoft.com/v1.0/directoryObjects/8afc02cb-4d62-4dba-b536-9f6d73e9be26"
}

サービス プリンシパルに所有者を割り当てる

最小特権委任アクセス許可: Application.ReadWrite.All

次の要求は、 appId を使用してサービス プリンシパルを参照します。 8afc02cb-4d62-4dba-b536-9f6d73e9be26 は、ユーザーまたはサービス プリンシパルのオブジェクト ID です。

POST https://graph.microsoft.com/v1.0/servicePrincipals(appId='46e6adf4-a9cf-4b60-9390-0ba6fb00bf6b')/owners/$ref
Content-Type: application/json

{
    "@odata.id": "https://graph.microsoft.com/v1.0/directoryObjects/8afc02cb-4d62-4dba-b536-9f6d73e9be26"
}

サービス プリンシパルの機密性の高いプロパティをロックする

アプリ インスタンスロック機能を使用すると、マルチテナント アプリの機密性の高いプロパティを未承認の改ざんから保護できます。 サービス プリンシパル オブジェクトの次のプロパティをロックできます。

  • 使用の種類Signが または Verifyである keyCredentials
  • passwordCredentials 使用の種類が または VerifyですSign
  • tokenEncryptionKeyId プロパティ。

アプリ インスタンスロック機能は、マルチテナント アプリのアプリケーション オブジェクトの servicePrincipalLockConfiguration プロパティを使用して管理します。

サービス プリンシパルのすべての機密性の高いプロパティをロックするには

isEnabledallProperties が にtrue設定されている場合、servicePrincipalLockConfiguration オブジェクトの他のプロパティが であるnull場合でも、サービス プリンシパルのすべての機密性の高いプロパティがロックされます。

PATCH https://graph.microsoft.com/beta/applications/a0b7f39e-3139-48aa-9397-f46fb63102f7

{
    "servicePrincipalLockConfiguration": {
        "isEnabled": true,
        "allProperties": true
    }
}

サービス プリンシパルの特定の機密プロパティをロックするには

次の例では、サービス プリンシパルの keyCredentials プロパティと passwordCredentials プロパティをロックし、アプリ インスタンスロック機能を有効にします。

PATCH https://graph.microsoft.com/beta/applications/a0b7f39e-3139-48aa-9397-f46fb63102f7

{
    "servicePrincipalLockConfiguration": {
        "isEnabled": true,
        "credentialsWithUsageSign": true,
        "credentialsWithUsageVerify": true
    }
}