通过

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

概述

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

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

显示终端用户、Microsoft Entra ID 和已发布应用程序之间关系的图表。

若要发布本机应用程序,请使用Microsoft 身份验证库,该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 平台策略,然后选择 Register。 创建并显示新应用程序注册的概述页。

有关创建新的应用程序注册的详细信息,请参阅将应用程序与 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 中的 mobiledesktop 应用。

有关在 Microsoft Entra ID 中设置单一登录应用程序的更多信息。