註冊應用程式

已完成

練習 - 註冊應用程式

若要讓應用程式能夠使用 Microsoft Entra 外部 ID 來登入,您必須在目錄中註冊應用程式。

注意

您至少需要應用程式開發人員目錄角色才能註冊應用程式。

此為特殊權限角色請參閱使用特殊權限角色的最佳做法

想提供意見反應? 請讓我們知道您的概念證明專案進行狀況如何。 我們很樂意收到您的寶貴意見。

  1. 若要註冊您自己的應用程式,請登入 Microsoft Entra 系統管理中心,並瀏覽至 [應用程式]>[應用程式註冊]。 然後,選取 [+ 新增註冊]

    [應用程式註冊] 刀鋒視窗的螢幕擷取畫面,其中已醒目提示名為 [新增註冊] 的按鈕。

  2. 在出現的 [註冊應用程式] 頁面中,輸入會向應用程式使用者顯示的有意義應用程式 [名稱],例如 Woodgrove Groceries。 在 [支援的帳戶類型] 底下,選取 [僅在此組織目錄中的帳戶]。 針對 [平台],選取 [Web] 選項,然後輸入您應用程式的 [重新導向 URI]。 重新導向 URI 是使用者在完成使用 Microsoft Entra 外部 ID 進行驗證之後,Microsoft Entra 外部 ID 會將使用者重新導向到的端點。

    [註冊應用程式] 刀鋒視窗的螢幕擷取畫面,已針對 [誰可以使用此應用程式或存取此 API?] 醒目提示 [僅此組織目錄中的帳戶],且 [重新導向 URI] 已醒目提示並設定為 [Web] 以及會在驗證成功後將使用者重新導向到的 URL。

  3. 應用程式的 [概觀] 窗格會在成功註冊時顯示。 記錄要在應用程式原始程式碼中使用的「應用程式 (用戶端) 識別碼」

    [應用程式註冊] 的螢幕擷取畫面,已醒目提示左側導覽中的 [概觀]。[基本資訊] 底下也醒目提示了 [應用程式 (用戶端) 識別碼]。

  4. 若要新增更多 [重新導向 URI] 或 [前端通道登出 URL],請在 [管理] 底下選取 [驗證]前端通道登出 URL 是我們傳送要求以讓應用程式清除使用者工作階段資料的地方。 必須有此位置,單一登出才能順利執行。

    [應用程式註冊] 底下 [驗證] 刀鋒視窗的螢幕擷取畫面,其中已在 [Web 重新導向 URI] 底下醒目提示 URI,以及醒目提示 [前端通道登出 URL] 的 URL。

  5. 若要讓 Web 應用程式 (機密用戶端) 取得存取權杖,其需要認證來向 Microsoft Entra ID 證明其身分識別。 您可以將憑證、用戶端密碼 (字串) 或同盟身分識別認證新增為機密用戶端應用程式註冊的認證。 對於雜貨網站,我們會使用憑證。 若要新增憑證,請選取 [憑證與秘密]>[憑證]>[上傳憑證]

    [應用程式註冊] 底下 [憑證與秘密] 刀鋒視窗的螢幕擷取畫面,其中沒有任何憑證,並醒目提示名為 [上傳憑證] 的按鈕。

  6. 選取您要上傳的檔案。 它必須是下列其中一種檔案類型:.cer、.pem、.crt。 然後選取 [新增]。

    在右側開啟之 [上傳憑證] 窗格的螢幕擷取畫面,已醒目提示用來上傳憑證的 [上傳] 圖示。

  7. 在下列步驟中,您會為 Web 應用程式新增所需的權限。 在 [管理] 底下,選取 [API 權限],然後選取 [新增權限]

    [應用程式註冊] 底下 [API 權限] 的螢幕擷取畫面,其中已醒目提示名為 [新增權限] 的按鈕。

  8. 在 [要求 API 權限] 中,選取 [Microsoft API] 索引標籤,然後選取 [Microsoft Graph]

    在右側開啟之 [要求 API 權限] 窗格的螢幕擷取畫面,其中已醒目提示名為 [Microsoft Graph] 的選擇群組。

  9. 選取 [委派的權限] 選項。 然後,在 [選取權限] 區段下,搜尋並選取 [openid] 和 [offline_access] 權限。 若要完成,請選取 [新增權限]

    在右側開啟之 [要求 API 權限] 窗格的螢幕擷取畫面,其中已醒目提示名為 [委派的權限] 的選擇群組,並在下方的核取方塊中核取 [offline_access] 和 [openid] 的權限。

  10. 此時,您已正確獲指派權限。 不過,由於租用戶是外部租用戶,因此取用者使用者本身無法同意這些權限。 身為系統管理員的您必須代表租用戶中的所有使用者同意這些權限:選取 [針對 <your tenant name> 授與管理員同意],然後選取 [是]

    [API 權限] 刀鋒視窗中已醒目提示名為 [針對 Woodgrove Groceries 授與管理員同意] 之按鈕的螢幕擷取畫面。

    做得好!現在您的應用程式已可供使用。

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.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"
}