如何让本机客户端应用程序与代理应用程序交互

Microsoft Entra 应用程序代理用于发布 Web 应用。 还可以使用它来发布配置有 Microsoft 身份验证库 (MSAL) 的本机客户端应用程序。 客户端应用程序不同于 Web 应用,因为前者安装在设备上,而后者需通过浏览器访问。

为了支持本机客户端应用程序,应用程序代理接受在标头中发送的由 Microsoft Entra ID 颁发的令牌。 应用程序代理服务会为用户执行身份验证。 此解决方案不使用应用程序令牌进行身份验证。

最终用户、Microsoft Entra ID 与已发布的应用程序之间的关系

若要发布本机应用程序,请使用 Microsoft 身份验证库(负责处理身份验证并支持许多客户端环境)。 应用程序代理适用于代表已登录用户调用 Web API 的桌面应用方案。

本文引导读者完成使用应用程序代理和 Microsoft 身份验证库 (MSAL) 发布本机应用程序的四个步骤。

步骤 1:发布代理应用程序

像发布任何其他应用程序一样发布代理应用程序,并分配可访问该应用程序的用户。 有关详细信息,请参阅使用应用程序代理发布应用程序

步骤 2:注册本机应用程序

现在,需要在 Microsoft Entra ID 中注册应用程序。

  1. 至少以应用程序管理员的身份登录到 Microsoft Entra 管理中心

  2. 请在右上角选择用户名。 验证是否已登录到使用应用程序代理的目录。 如果需要更改目录,请选择“切换目录”,然后选择使用应用程序代理的目录

  3. 浏览到“标识”>“应用程序”>“应用注册”。 会显示所有应用注册的列表。

  4. 选择“新注册”。 会显示“注册应用程序”页。

    在 Microsoft Entra 管理中心创建新的应用注册

  5. 在“名称”标题中,为应用程序指定面向用户的显示名称。

  6. 在“支持的帐户类型”标题下,使用以下准则选择访问级别。

    • 若要仅面向组织内部的帐户,请选择“仅此组织目录中的帐户”。
    • 若要仅面向企业或教育客户,请选择“任何组织目录中的帐户”。
    • 若要面向最广泛的 Microsoft 标识集,请选择“任何组织目录中的帐户和个人 Microsoft 帐户”。
  7. 在“重定向 URI”下,选择“公共客户端(移动和桌面)”,然后键入应用程序的重定向 URI https://login.microsoftonline.com/common/oauth2/nativeclient

  8. 选择并阅读“Microsoft 平台策略”,然后选择“注册”。 会创建并显示新应用程序注册的概述页。

若要更详细地了解如何创建新的应用程序注册,请参阅将应用程序与 Microsoft Entra ID 集成

步骤 3:授予对代理应用程序的访问权限

你的本机应用程序已注册。 授予它对代理应用程序的访问权限:

  1. 在新应用程序注册页的边栏中,选择“API 权限”。 会显示新应用程序注册的“API 权限”页。
  2. 选择“添加权限”。 会显示“请求获取 API 权限”页。
  3. 在“选择 API”设置下,选择“我的组织使用的 API”。 将显示一个列表,其中包含目录中公开 API 的应用程序。
  4. 在搜索框中键入或滚动查找在步骤 1:发布代理应用程序中发布的代理应用程序,然后选择该代理应用程序。
  5. 在“应用程序需要哪种类型的权限?”标题中,选择权限类型。 如果本机应用程序需要以已登录用户的身份访问代理应用程序 API,请选择“委托的权限”。
  6. 在“选择权限”标题中,选择所需权限,然后选择“添加权限”。 本机应用程序的“API 权限”页现在会显示你添加的代理应用程序和权限 API。

步骤 4:向代码添加 Microsoft 身份验证库(.NET C# 示例)

在 Microsoft 身份验证库 (MSAL) 的身份验证上下文中编辑本机应用程序代码,以包含以下文本:

// Acquire access token from Microsoft Entra ID for proxy application
IPublicClientApplication clientApp = PublicClientApplicationBuilder
.Create(<App ID of the Native app>)
.WithDefaultRedirectUri() // will automatically use the default Uri for native app
.WithAuthority("https://login.microsoftonline.com/{<Tenant ID>}")
.Build();

AuthenticationResult authResult = null;
var accounts = await clientApp.GetAccountsAsync();
IAccount account = accounts.FirstOrDefault();

IEnumerable<string> scopes = new string[] {"<Scope>"};

try
 {
    authResult = await clientApp.AcquireTokenSilent(scopes, account).ExecuteAsync();
 }
    catch (MsalUiRequiredException ex)
 {
     authResult = await clientApp.AcquireTokenInteractive(scopes).ExecuteAsync();                
 }

if (authResult != null)
 {
  //Use the Access Token to access the Proxy Application

  HttpClient httpClient = new HttpClient();
  httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", authResult.AccessToken);
  HttpResponseMessage response = await httpClient.GetAsync("<Proxy App Url>");
 }

可在 Microsoft Entra 管理中心找到示例代码中所需的信息,如下所示:

所需信息 如何在 Microsoft Entra 管理中心查找此信息
<租户 ID> “标识”>“概述”>“属性”
<本机应用的应用 ID> “应用程序注册”>你的本机应用程序>“概述”>“应用程序 ID”
<范围> “应用程序注册”>你的本机应用程序>“API 权限”> 选择“权限 API”(user_impersonation) >,右侧会显示一个标题为“user_impersonation”的面板。 > 范围是编辑框中的 URL。
<代理应用 URL> API 的外部 URL 和路径

使用这些参数编辑 MSAL 代码之后,你的用户可以向本机客户端应用程序进行身份验证,即使他们在企业网络之外。

后续步骤

有关本机应用程序流的详细信息,请参阅 Microsoft Entra ID 中的移动桌面应用。

了解如何在 Microsoft Entra ID 中设置应用程序的单一登录