共用方式為


呼叫 Web API 的桌面應用程式:程式碼設定

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

本文包含指示,可協助您使用應用程式的座標來設定程式碼。

先決條件

新增平台重新導向網址(URI)

若要在應用程式註冊中指定您的應用程式類型,請遵循下列步驟:

  1. [管理] 底下,選取 [驗證]> [新增平台>] 行動和桌面應用程式
  2. 根據您使用的驗證方法,選擇下列其中一個選項:
    • 對於使用內嵌瀏覽器的應用程式,請使用確切值: https://login.microsoftonline.com/common/oauth2/nativeclient
    • 對於使用系統瀏覽器的應用程式,請使用精確值: http://localhost
    • 適用於 macOS 的 Objective-C 或 Swift 應用程式: msauth.<your.app.bundle.id>://auth
    • Node.js Electron 應用程序: msal{Your_Application/Client_Id}://auth

備註

針對 Web 驗證管理員 (WAM) 應用程式,MSAL 中不需要重新導向 URI。

啟用公開客戶端流程

若要使用常駐程式應用程式中使用的用戶端認證流程,將裝置程式碼流程、整合式 Windows 驗證,以及使用者名稱和密碼與機密用戶端應用程式區分開來,這些應用程式都不需要重新導向 URI,請將其設定為公用用戶端應用程式。 若要達成此設定

若要將您的應用程式識別為公用用戶端,請遵循下列步驟:

  1. 在 [管理] 底下,選取 [驗證]

  2. 在 [進階設定] 下方的 [允許公用用戶端流程],選取 [是]

  3. 選取儲存以儲存變更。

支援桌面應用程式的 Microsoft 程式庫

下列 Microsoft 程式庫支援桌面應用程式:

語言/架構 專案啟動
GitHub
包裹 開始
開始
用戶登入 存取 Web API 正式發行 (GA)
公開預覽1
電子 MSAL Node.js msal-node 函式庫可以要求用於使用者登入的ID憑證。 程式庫可以要求受保護 Web API 的存取權杖。 公開預覽
JAVA MSAL4J msal4j 函式庫可以要求用於使用者登入的ID憑證。 程式庫可以要求受保護 Web API 的存取權杖。 GA
macOS (Swift/Obj-C) 適用於 iOS 和 macOS 的 MSAL MSAL (部分機器翻譯) 教學課程 函式庫可以要求用於使用者登入的ID憑證。 程式庫可以要求受保護 Web API 的存取權杖。 GA
UWP MSAL.NET Microsoft.Identity.Client 教學課程 函式庫可以要求用於使用者登入的ID憑證。 程式庫可以要求受保護 Web API 的存取權杖。 GA
WPF MSAL.NET Microsoft.Identity.Client 教學課程 函式庫可以要求用於使用者登入的ID憑證。 程式庫可以要求受保護 Web API 的存取權杖。 GA

1在線服務的通用授權條款適用於公開預覽中的圖書館。

公用用戶端應用程式

從程式碼的觀點來看,桌面應用程式是公用用戶端應用程式。 根據您是否使用互動式驗證,設定會有一點不同。

您必須建立和操作 MSAL.NET IPublicClientApplication

IPublicClientApplication

僅透過程式碼

下列程式碼會將公用用戶端應用程式具現化,並透過使用者的公司和學校帳戶,或是使用者的個人 Microsoft 帳戶,將使用者登入 Microsoft Azure 公用雲端。

IPublicClientApplication app = PublicClientApplicationBuilder.Create(clientId)
    .Build();

如果您想要使用互動式驗證或裝置程式碼流程 (如先前所示),請使用 .WithRedirectUri 修飾元。

IPublicClientApplication app;
app = PublicClientApplicationBuilder.Create(clientId)
        .WithDefaultRedirectUri()
        .Build();

使用組態檔

下列程式碼會從設定物件將公用用戶端應用程式具現化,該設定物件可透過程式設計方式填入或從設定檔讀取。

PublicClientApplicationOptions options = GetOptions(); // your own method
IPublicClientApplication app = PublicClientApplicationBuilder.CreateWithApplicationOptions(options)
        .WithDefaultRedirectUri()
        .Build();

更詳細的設定

您可以藉由新增一些修飾元來詳細地建立應用程式。 例如,如果您想要讓應用程式成為國家雲端中的多租用戶應用程式,例如美國政府,您可以撰寫:

IPublicClientApplication app;
app = PublicClientApplicationBuilder.Create(clientId)
        .WithDefaultRedirectUri()
        .WithAadAuthority(AzureCloudInstance.AzureUsGovernment,
                         AadAuthorityAudience.AzureAdMultipleOrgs)
        .Build();

MSAL.NET 也包含 Active Directory 同盟服務 2019 的修飾器:

IPublicClientApplication app;
app = PublicClientApplicationBuilder.Create(clientId)
        .WithAdfsAuthority("https://consoso.com/adfs")
        .Build();

最後,如果您想要獲取 Azure Active Directory (Azure AD) B2C 租戶的權杖,請按照下列程式碼片段指定您的租戶:

IPublicClientApplication app;
app = PublicClientApplicationBuilder.Create(clientId)
        .WithB2CAuthority("https://fabrikamb2c.b2clogin.com/tfp/{tenant}/{PolicySignInSignUp}")
        .Build();

深入了解

若要深入了解如何設定 MSAL.NET 桌面應用程式:

具有設定選項的完整範例

想象一下包含下列 appsettings.json 設定檔的 .NET 主控台應用程式:

{
  "Authentication": {
    "AzureCloudInstance": "AzurePublic",
    "AadAuthorityAudience": "AzureAdMultipleOrgs",
    "ClientId": "00001111-aaaa-2222-bbbb-3333cccc4444"
  },

  "WebAPI": {
    "MicrosoftGraphBaseEndpoint": "https://graph.microsoft.com"
  }
}

您可以使用 .NET 提供的設定架構,以少量的程式碼來讀取此檔案:

public class SampleConfiguration
{
 /// <summary>
 /// Authentication options
 /// </summary>
 public PublicClientApplicationOptions PublicClientApplicationOptions { get; set; }

 /// <summary>
 /// Base URL for Microsoft Graph (it varies depending on whether the application runs
 /// in Microsoft Azure public clouds or national or sovereign clouds)
 /// </summary>
 public string MicrosoftGraphBaseEndpoint { get; set; }

 /// <summary>
 /// Reads the configuration from a JSON file
 /// </summary>
 /// <param name="path">Path to the configuration json file</param>
 /// <returns>SampleConfiguration as read from the json file</returns>
 public static SampleConfiguration ReadFromJsonFile(string path)
 {
  // .NET configuration
  IConfigurationRoot Configuration;
  var builder = new ConfigurationBuilder()
                    .SetBasePath(Directory.GetCurrentDirectory())
                    .AddJsonFile(path);
  Configuration = builder.Build();

  // Read the auth and graph endpoint configuration
  SampleConfiguration config = new SampleConfiguration()
  {
   PublicClientApplicationOptions = new PublicClientApplicationOptions()
  };
  Configuration.Bind("Authentication", config.PublicClientApplicationOptions);
  config.MicrosoftGraphBaseEndpoint =
  Configuration.GetValue<string>("WebAPI:MicrosoftGraphBaseEndpoint");
  return config;
 }
}

現在,若要建立您的應用程式,請撰寫下列程式碼:

SampleConfiguration config = SampleConfiguration.ReadFromJsonFile("appsettings.json");
var app = PublicClientApplicationBuilder.CreateWithApplicationOptions(config.PublicClientApplicationOptions)
           .WithDefaultRedirectUri()
           .Build();

在呼叫 .Build() 方法之前,您可以透過呼叫 .WithXXX 方法來覆寫您的設定,如先前所示。

下一步

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