如何設定呼叫 Web API 的精靈應用程式

適用於: 帶有白色核取記號符號的綠色圓圈,表示以下內容適用於員工租戶。 員工租戶 (瞭解更多資訊)

了解如何設定精靈應用程式的程式碼,以呼叫 Web API。

支援精靈應用程式的 Microsoft 程式庫

下列 Microsoft 程式庫支援精靈應用程式:

語言 / 架構 專案進行中
GitHub
套件 開始
開始
登入使用者 存取 Web API 正式發行 (GA) 或
公開預覽1
.NET MSAL.NET Microsoft.Identity.Client 快速入門 程式庫無法要求用於使用者登入的 ID 令牌。 函式庫可以要求存取受保護的網路 API 的存取憑證。 GA
JAVA MSAL4J msal4j — 程式庫無法要求用於使用者登入的 ID 令牌。 函式庫可以要求存取受保護的網路 API 的存取憑證。 GA
Node MSAL 節點 msal-node 快速入門 程式庫無法要求用於使用者登入的 ID 令牌。 函式庫可以要求存取受保護的網路 API 的存取憑證。 GA
Python MSAL Python msal-python 快速入門 程式庫無法要求用於使用者登入的 ID 令牌。 函式庫可以要求存取受保護的網路 API 的存取憑證。 GA

1在線服務的通用授權條款適用於公開預覽中的連結庫。

設定權限

精靈應用程式會使用應用程式許可權,而不是委派權限。 因此,其所支援的帳戶類型不可以是任何組織目錄中的帳戶,也不可以為任何個人的 Microsoft 帳戶 (例如 Skype、Xbox、Outlook.com)。 沒有租用戶系統管理員可以將精靈應用程式的同意權限授與 Microsoft 個人帳戶。 您需要選擇 在我組織中的帳戶 或 在任何組織中的帳戶。

應用程式設定中指定的權限應該包含你的租戶 ID 或與你組織相關的網域名稱。

即使您想要提供多租戶工具,您也應該使用租戶 ID 或網域名稱,而不是使用此流程,因為服務無法可靠地推斷應使用哪一個租戶。

設定和具現化應用程式

在 Microsoft 驗證程式庫(MSAL)中,用戶端認證(秘密或憑證)被作為參數傳遞給機密用戶端應用程式。

重要

即使您的應用程式是以服務方式執行的主控台應用程式,如果該應用程式為精靈應用程式,則一定會是機密用戶端應用程式。

組態檔

組態檔會定義以下項目:

  • 雲端執行個體和租用戶識別碼,兩者一起就會構成「授權單位」。
  • 應用程式註冊所提供的用戶端識別碼。
  • 選擇用戶端密碼或憑證其中一項。

這裡有一個 appsettings.json 範例設定檔中定義設定的範例。 此範例取自 GitHub 上的 .NET 主控台精靈程式碼範例。

{
    "AzureAd": {
        "Instance": "https://login.microsoftonline.com/",
        "TenantId": "[Enter here the tenantID or domain name for your Azure AD tenant]",
        "ClientId": "[Enter here the ClientId for your application]",
        "ClientCredentials": [
            {
                "SourceType": "ClientSecret",
                "ClientSecret": "[Enter here a client secret for your application]"
            }
        ]
    }
}

您提供的是憑證,而不是用戶端密碼,或是工作負載身分識別同盟認證。

實例化 MSAL 應用程式

若要具現化 MSAL 應用程式,請 (視您所使用的程式語言而定) 新增、參考或匯入 MSAL 套件。

取決於您是否使用用戶端密碼、憑證(或者在進階情況下,使用簽名的聲明),結構會有所不同。

參考套件

請在您的應用程式程式碼中參考 MSAL 套件。

將 Microsoft.Identity.Web.TokenAcquisition NuGet 套件新增至應用程式。 或者,如果您想要呼叫 Microsoft Graph,請新增 Microsoft.Identity.Web.GraphServiceClient 套件。 專案可能如下所示。 appsettings.json 檔案必須複製到輸出目錄。

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net7.0</TargetFramework>
    <RootNamespace>daemon_console</RootNamespace>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Identity.Web.GraphServiceClient" Version="2.12.2" />
  </ItemGroup>

  <ItemGroup>
    <None Update="appsettings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
  </ItemGroup>
</Project>

在 Program.cs 檔案中,在程式碼中新增 using 指示詞以參考 Microsoft.Identity.Web。

using Microsoft.Identity.Abstractions;
using Microsoft.Identity.Web;

使用用戶端密碼來具現化機密用戶端應用程式

以下是使用用戶端密碼來具現化機密用戶端應用程式的程式碼:

下列範例示範如何使用 Microsoft.Identity.Web 和用戶端密碼來建立機密用戶端應用程式:

   class Program
    {
        static async Task Main(string[] _)
        {
            // Get the Token acquirer factory instance. By default it reads an appsettings.json
            // file if it exists in the same folder as the app (make sure that the 
            // "Copy to Output Directory" property of the appsettings.json file is "Copy if newer").
            TokenAcquirerFactory tokenAcquirerFactory = TokenAcquirerFactory.GetDefaultInstance();

            // Configure the application options to be read from the configuration
            // and add the services you need (Graph, token cache)
            IServiceCollection services = tokenAcquirerFactory.Services;
            services.AddMicrosoftGraph();
            // By default, you get an in-memory token cache.
            // For more token cache serialization options, see https://aka.ms/msal-net-token-cache-serialization

            // Resolve the dependency injection.
            var serviceProvider = tokenAcquirerFactory.Build();

            // ...
        }
    }

從 appsettings.json 讀取此設定:

使用用戶端憑證來具現化機密用戶端應用程式

以下是建置具有憑證之應用程式的程式碼:

應用程式建構程式碼與用戶端秘密範例相同。 唯一的差別是憑證是在設定中描述,而非秘密。 有許多方式可以取得此憑證。 詳情請參閱「使用憑證於 Microsoft Identity Web」。 以下設定範例展示了如何從 Azure Key Vault 取得您的憑證。 Microsoft 身分識別委派給 Azure 身分識別的 DefaultAzureCredential,並在可用時使用託管身分識別從 KeyVault 存取憑證。 你可以在本地除錯你的應用程式,因為 DefaultAzureCredential 會使用你的開發者憑證。

  "ClientCredentials": [
      {
        "SourceType": "KeyVault",
        "KeyVaultUrl": "https://yourKeyVaultUrl.vault.azure.net",
        "KeyVaultCertificateName": "NameOfYourCertificate"
      }

進階情境:使用用戶端聲明實例化機密用戶端應用程式

除了使用用戶端密碼或憑證之外,保密用戶端應用程式也可以使用用戶端判斷提示來證明其身分識別。 如需詳細資訊,請參閱 CredentialDescription。

下一步

請繼續前往本情境中的下一篇文章:取得應用程式的權杖。