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

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

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

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

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

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

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

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

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

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

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

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

  3. 访问 Entra ID>应用注册。 将显示所有应用注册的列表。

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

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

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

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

    • 若要仅面向组织内部的帐户, 请仅选择此组织目录中的帐户
    • 若要仅面向企业或教育客户,请选择 任何组织目录中的帐户
  7. “重定向 URI”下,选择 “公共客户端”(移动和桌面),然后键入应用程序的重定向 URI https://login.partner.microsoftonline.cn/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.partner.microsoftonline.cn/{<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> Entra ID>概述>性能
<本机应用的应用 ID> 应用程序注册>本机应用程序>概述>应用程序 ID
<范围> 应用程序注册>本机应用程序>API 权限> 在权限 API 中选择 (user_impersonation) > 右侧面板会显示标题为 user_impersonation 的内容。 > 范围是编辑框中的 URL。
<代理应用 URL> API 的外部 URL 和路径

编辑 MSAL 代码并使用这些参数后,即使用户位于企业网络外,也可以对本机客户端应用程序进行身份验证。

后续步骤

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

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