你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

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

使用 Azure Active Directory (Azure AD) 应用程序代理不仅可以发布 Web 应用,而且还能发布已使用 Microsoft 身份验证库 (MSAL) 配置的本机客户端应用程序。 本机客户端应用程序不同于 Web 应用,因为前者安装在设备上,而后者需通过浏览器进行访问。

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

最终用户、Azure AD 与已发布应用程序之间的关系

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

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

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

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

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

现在需要在 Azure AD 中注册应用程序,如下所示:

  1. 登录到 Azure Active Directory 门户。 会显示 Azure Active Directory 管理中心的仪表板。

  2. 在边栏中,选择“Azure Active Directory”。 会显示 Azure Active Directory 概述页。

  3. 在 Azure AD 概述边栏中,选择“应用注册”。 会显示所有应用注册的列表。

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

    在 Azure 门户中创建新的应用注册

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

  6. 在“受支持的帐户类型”标题下,使用以下指导原则选择访问级别:

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

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

有关创建新应用程序注册的更多详细信息,请参阅将应用程序与 Azure Active Directory 集成

步骤 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 AAD 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>");
 }

示例代码中的所需信息可在 Azure AD 门户中找到,如下所示:

所需信息 如何在 Azure AD 门户中找到它
<租户 ID> “Azure Active Directory”>“属性”>“目录 ID”
<本机应用的应用 ID> “应用程序注册”>你的本机应用程序>“概述”>“应用程序 ID”
<范围> “应用程序注册”>你的本机应用程序>“API 权限”> 单击权限 API (user_impersonation) > 一个标题为“user_impersonation”的面板会出现在右侧。 > 范围是编辑框中的 URL。
<代理应用 URL> API 的外部 URL 和路径

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

后续步骤

有关本机应用程序流的详细信息,请参阅 Azure Active Directory 中的移动桌面应用

了解如何在 Azure Active Directory 中设置应用程序的单一登录