Microsoft Entra 应用程序代理用于发布 Web 应用。 还可以使用它来发布配置有Microsoft身份验证库(MSAL)的本机客户端应用程序。 客户端应用程序不同于 Web 应用,因为它们安装在设备上,而 Web 应用是通过浏览器访问的。
为了支持原生客户端应用程序,应用程序代理接受由 Microsoft Entra ID 颁发并在标头中发送的令牌。 应用程序代理服务为用户执行身份验证。 此解决方案不使用应用程序令牌进行身份验证。
若要发布本机应用程序,请使用Microsoft身份验证库,该库负责身份验证并支持许多客户端环境。 应用程序代理适用于 桌面应用程序代替已登录用户调用 Web API 的情况。
本文指导你完成使用应用程序代理和Microsoft身份验证库(MSAL)发布本机应用程序的四个步骤。
步骤 1:发布代理应用程序
像发布任何其他应用程序一样发布代理应用程序,并分配用户访问应用程序。 有关详细信息,请参阅 使用应用程序代理发布应用程序。
步骤 2:注册本机应用程序
现在,需要在 Microsoft Entra ID 中注册应用程序。
至少以应用程序管理员的身份登录到 Microsoft Entra 管理中心。
请在右上角选择用户名。 验证是否已登录到使用应用程序代理的目录。 如果需要更改目录,请选择“切换目录”,然后选择使用应用程序代理的目录。
访问 Entra ID>应用注册。 将显示所有应用注册的列表。
选择“新注册”。 将显示注册应用程序页。
在 “名称” 标题中,指定应用程序的面向用户的显示名称。
在 “支持的帐户类型 ”标题下,使用以下准则选择访问级别。
- 若要仅面向组织内部的帐户, 请仅选择此组织目录中的帐户。
- 若要仅面向企业或教育客户,请选择 任何组织目录中的帐户。
在 “重定向 URI”下,选择 “公共客户端”(移动和桌面),然后键入应用程序的重定向 URI
https://login.partner.microsoftonline.cn/common/oauth2/nativeclient。选择并读取 Microsoft平台策略,然后选择“ 注册”。 创建并显示新应用程序注册的概述页。
有关创建新应用程序注册的更多详细信息,请参阅 将应用程序与 Microsoft Entra ID 集成。
步骤 3:授予对代理应用程序的访问权限
本机应用程序已注册。 授予它对代理应用程序的访问权限:
- 在新应用程序注册页的边栏中,选择 API 权限。 此时会显示新应用程序注册的 API 权限 页。
- 选择“添加权限”。 此时会显示 “请求 API 权限 ”页。
- 在 “选择 API ”设置下,选择 组织使用的 API。 此时会显示一个列表,其中包含公开 API 的目录中的应用程序。
- 键入搜索框或滚动以查找在 步骤 1 中发布的代理应用程序:发布代理应用程序,然后选择代理应用程序。
- 在 应用程序所需的权限类型中 ,选择权限类型。 如果本机应用程序需要以已登录用户的身份访问代理应用程序 API,请选择 “委派权限”。
- 在 “选择权限 ”标题中,选择所需的权限,然后选择“ 添加权限”。 本机应用程序的 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 代码并使用这些参数后,即使用户位于企业网络外,也可以对本机客户端应用程序进行身份验证。