共用方式為


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

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

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

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

語言 / 架構 專案平台
GitHub
套件 開始
啟動
登入使用者 存取 Web API 正式發行 (GA)
公開預覽1
.NET MSAL.NET Microsoft.Identity.Client 快速入門 程式庫無法要求供使用者登入的識別碼權杖。 程式庫可以要求受保護 Web API 的存取權杖。 GA
Java MSAL4J msal4j 程式庫無法要求供使用者登入的識別碼權杖。 程式庫可以要求受保護 Web API 的存取權杖。 GA
節點 MSAL 節點 msal-node 快速入門 程式庫無法要求供使用者登入的識別碼權杖。 程式庫可以要求受保護 Web API 的存取權杖。 GA
Python MSAL Python msal-python 快速入門 程式庫無法要求供使用者登入的識別碼權杖。 程式庫可以要求受保護 Web API 的存取權杖。 GA

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

設定授權單位

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

在應用程式設定中所指定的授權單位應為租用戶 (指定租用戶識別碼,或與您組織相關聯的網域名稱)。

即使您想要提供多租使用者工具,您也應該使用租使用者標識碼或功能變數名稱,而不是 common organizations使用此流程,因為服務無法可靠地推斷要使用哪一個租使用者。

設定和具現化應用程式

在 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

下一步

請前往本案例中的下一篇文章:取得應用程式的權杖