アプリケーションを登録する
演習 - アプリケーションを登録する
アプリが Microsoft Entra External ID でサインインできるようにするには、アプリケーションをディレクトリに登録する必要があります。
Note
アプリケーションを登録するには、少なくともアプリケーション開発者ディレクトリ ロールが必要です。
このロールは特権ロールです。 特権ロールを使用するためのベスト プラクティスについてお読みください。
フィードバックがありますか? ご自身の概念実証プロジェクトがどのように進んでいるかをお知らせください。 ご意見をお聞かせください!
独自のアプリケーションを登録するには、Microsoft Entra 管理センターにサインインし、[アプリケーション]>[アプリの登録] に移動します。 次に、[+ 新規登録] を選択します。
表示された [アプリケーションの登録] ページで、アプリのユーザーに表示されるわかりやすいアプリケーションの [名前] を入力します (例: Woodgrove Groceries)。 [サポートされているアカウントの種類] で、 [この組織のディレクトリ内のアカウントのみ] を選択します。 [プラットフォーム] には [Web] オプションを選択し、アプリのリダイレクト URI を入力します。 リダイレクト URI は、ユーザーが Microsoft Entra External ID を使用した認証を完了した後、Microsoft Entra External ID によってリダイレクトされるエンドポイントです。
登録が成功すると、アプリケーションの [概要] ペインが表示されます。 アプリのソース コードで使用するアプリケーション (クライアント) ID を記録します。
[リダイレクト URI] または [フロントチャネルのログアウト URL] をさらに追加するには、[管理] の下にある [認証] を選択します。 [フロントチャネルのログアウト URL] は、アプリケーションでユーザーのセッション データをクリアする要求の送信先です。 これは、シングル サインアウトを正常に行うために必要です。
Web アプリケーション (機密クライアント) がアクセス トークンを取得するには、Microsoft Entra ID に対してその ID を証明するための資格情報が必要です。 証明書、クライアント シークレット (文字列)、またはフェデレーション ID 資格情報を資格情報として機密クライアント アプリの登録に追加できます。 食料雑貨店の Web サイトでは、証明書を使います。 証明書を追加するには、[証明書とシークレット]>[証明書]>[証明書のアップロード] の順に選択します。
アップロードするファイルを選択します。 ファイルの種類は .cer、 .pem、 .crt のいずれかである必要があります。 その後、追加を選択します。
以下の手順では、Web アプリケーションに必要なアクセス許可を追加していきます。 [管理] の下にある [API のアクセス許可] を選択してから、[アクセス許可の追加] を選択します。
[API アクセス許可の要求] で、[Microsoft API] タブを選択してから、[Microsoft Graph] を選択します。
[委任されたアクセス許可] オプションを選択します。 次に、[アクセス許可の選択] セクションで、openid と offline_access の両方のアクセス許可を検索して選択します。 [アクセス許可の追加] を選択して完了します。
この時点で、アクセス許可が正しく割り当てられます。 ただし、テナントは外部テナントであるため、コンシューマー ユーザー自身はこれらのアクセス許可に同意できません。 テナント内のすべてのユーザーに代わって、管理者がこれらのアクセス許可に同意する必要があります。[
<your tenant name>
に管理者の同意を与えます] を選択してから、[はい] を選択します。"お疲れさまでした。これでアプリケーションを使用する準備ができました。"
1.アプリケーションの登録
Web アプリケーションを登録するには、次の Microsoft Graph 要求を使用し、以下の値を置き換えます。
displayName の値を、アプリの表示名に。 例: Woodgrove Groceries。
redirectUris の値を、アプリケーションのリダイレクト URI に。 たとえば、https://woodgrovedemo.com/signin-oidc のようにします。 https://www.jwt.ms/ を使用することもできます。
POST https://graph.microsoft.com/v1.0/applications { "displayName": "Woodgrove Groceries", "description": "Woodgrove Groceries live demo application", "signInAudience": "AzureADMyOrg", "api": { "acceptMappedClaims": true, "requestedAccessTokenVersion": 2 }, "requiredResourceAccess": [ { "resourceAppId": "a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1", "resourceAccess": [ { "id": "b1b1b1b1-cccc-dddd-eeee-f2f2f2f2f2f2", "type": "Scope" }, { "id": "c2c2c2c2-dddd-eeee-ffff-a3a3a3a3a3a3", "type": "Scope" } ] } ], "web": { "redirectUris": [ "https://woodgrovedemo.com/signin-oidc" ], "implicitGrantSettings": { "enableAccessTokenIssuance": false, "enableIdTokenIssuance": false } } }
1.1 アプリケーション ID をコピーする
応答から、appId の値をコピーします。 次に例を示します。
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#applications/$entity",
"id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
"appId": "00001111-aaaa-2222-bbbb-3333cccc4444",
"displayName": "Woodgrove Groceries",
"description": "Woodgrove Groceries live demo application",
...
}
2.アプリケーションのサービス プリンシパルを作成する
アプリケーションを登録したら、サービス プリンシパルを作成します。 次の Graph 呼び出しにより、サービス プリンシパルが作成されます。 {appId} は、前の呼び出しで取得したアプリの appId に置き換えてください (オブジェクト ID ではありません)。
POST https://graph.microsoft.com/v1.0/servicePrincipals
{
"appId": "{appId}"
}
2.1 サービス プリンシパル ID をコピーする
応答から、id の値をコピーします。次に例を示します。
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#servicePrincipals/$entity",
"id": "bbbbbbbb-1111-2222-3333-cccccccccccc",
"displayName": "Woodgrove Groceries",
"description": "Woodgrove Groceries live demo application",
...
}
3.必要なアクセス許可に同意する
テナントは外部テナントであるため、コンシューマー ユーザー自身はこれらのアクセス許可に同意できません。 テナント内のすべてのユーザーに代わって、管理者がこれらのアクセス許可に同意する必要があります。
3.1 Microsoft Graph のサービス プリンシパル ID を取得する
次の GET 要求を実行して、応答から id をコピーします。
GET https://graph.microsoft.com/v1.0/servicePrincipals(appId='22223333-cccc-4444-dddd-5555eeee6666')
{
"id": "cccccccc-2222-3333-4444-dddddddddddd",
"appDisplayName": "Microsoft Graph",
"appId": "22223333-cccc-4444-dddd-5555eeee6666"
}
3.2 必要なアクセス許可を付与する
{service-principal-id} は、以前の手順でコピーしたサービス プリンシパルの id に置き換えてください。 {graph-service-principal-id} は、直前の手順でコピーしたサービス プリンシパルの id に置き換えてください。
POST https://graph.microsoft.com/v1.0/oauth2PermissionGrants
{
"clientId": "{service-principal-id}",
"consentType": "AllPrincipals",
"resourceId": "{graph-service-principal-id}",
"scope": "openid offline_access"
}
4.(省略可能) クライアント シークレットを追加する
資格情報を使うと、トークンを受信するときに機密アプリケーションが認証サービスに対して身元を証明できます。 より高いレベルで保証するには、資格情報として (クライアント シークレットではなく) 証明書を使うことをお勧めします。 クライアント シークレットを取得するには、次の要求を実行します。 {graph-service-principal-id} は、最初の手順で取得した appId に置き換えてください。
POST https://graph.microsoft.com/v1.0/applications(appId='appId')/addPassword
{
"passwordCredential": {
"displayName": "My app client secret"
}
}
応答から、secretText の値をコピーします。
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#microsoft.graph.passwordCredential",
"displayName": "My app client secret",
"endDateTime": "2026-05-23T15:16:42",
"hint": "<Your hint will show up here>",
"keyId": "aaaaaaaa-0b0b-1c1c-2d2d-333333333333",
"secretText": "A1bC2dE3fH4iJ5kL6mN7oP8qR9sT0u",
"startDateTime": "2024-05-23T15:16:42"
}