註冊應用程式
練習 - 註冊應用程式
若要讓應用程式能夠使用 Microsoft Entra 外部 ID 來登入,您必須在目錄中註冊應用程式。
注意
您至少需要應用程式開發人員目錄角色才能註冊應用程式。
此為特殊權限角色。 請參閱使用特殊權限角色的最佳做法。
想提供意見反應? 請讓我們知道您的概念證明專案進行狀況如何。 我們很樂意收到您的寶貴意見。
若要註冊您自己的應用程式,請登入 Microsoft Entra 系統管理中心,並瀏覽至 [應用程式]>[應用程式註冊]。 然後,選取 [+ 新增註冊]。
在出現的 [註冊應用程式] 頁面中,輸入會向應用程式使用者顯示的有意義應用程式 [名稱],例如 Woodgrove Groceries。 在 [支援的帳戶類型] 底下,選取 [僅在此組織目錄中的帳戶]。 針對 [平台],選取 [Web] 選項,然後輸入您應用程式的 [重新導向 URI]。 重新導向 URI 是使用者在完成使用 Microsoft Entra 外部 ID 進行驗證之後,Microsoft Entra 外部 ID 會將使用者重新導向到的端點。
應用程式的 [概觀] 窗格會在成功註冊時顯示。 記錄要在應用程式原始程式碼中使用的「應用程式 (用戶端) 識別碼」。
若要新增更多 [重新導向 URI] 或 [前端通道登出 URL],請在 [管理] 底下選取 [驗證]。 前端通道登出 URL 是我們傳送要求以讓應用程式清除使用者工作階段資料的地方。 必須有此位置,單一登出才能順利執行。
若要讓 Web 應用程式 (機密用戶端) 取得存取權杖,其需要認證來向 Microsoft Entra ID 證明其身分識別。 您可以將憑證、用戶端密碼 (字串) 或同盟身分識別認證新增為機密用戶端應用程式註冊的認證。 對於雜貨網站,我們會使用憑證。 若要新增憑證,請選取 [憑證與秘密]>[憑證]>[上傳憑證]。
選取您要上傳的檔案。 它必須是下列其中一種檔案類型:.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 複製應用程式識別碼
從回應中,複製 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 (而非物件識別碼)。
POST https://graph.microsoft.com/v1.0/servicePrincipals
{
"appId": "{appId}"
}
2.1 複製服務主體識別碼
從回應中,複製 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 的服務主體識別碼
執行下列 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"
}