共用方式為


如何設定呼叫 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;

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

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

   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 讀取此設定:

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

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

程式碼本身完全相同。 會在設定中描述此憑證。 有許多方式可以取得此憑證。 如需詳細資訊,請參閱 https://aka.ms/ms-id-web-certificates。 以下是從 KeyVault 取得憑證的方式。 Microsoft 身分識別委派給 Azure 身分識別的 DefaultAzureCredential,並在可用時使用託管身分識別從 KeyVault 存取憑證。 您可以在本機對應用程式進行偵錯,因為其會使用開發人員認證。

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

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

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

下一步

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