如何設定呼叫 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 個人帳戶精靈應用程式的同意。 您必須選擇 我組織中的 帳戶,或 任何組織中的帳戶。

應用程式組態中指定的授權單位應是租使用者(指定租使用者標識碼或與您組織相關聯的功能變數名稱)。

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

設定和具現化應用程式

在 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

下一步

請移至此案例中的下一篇文章, 取得應用程式的令牌。