使用 Microsoft Entra 应用程序代理提供对私有云或本地托管的应用程序编程接口 (API) 的安全访问

业务逻辑通常位于专用应用程序编程接口 (API) 中。 该 API 在本地或私有云中运行。 本机 Android、iOS、Mac 或 Windows 应用需要与 API 终结点交互才能使用数据或提供用户交互功能。 Microsoft Entra 应用程序代理和 Microsoft身份验证库(MSAL) 使本机应用能够安全地访问私有云 API。 与开启防火墙端口和控制应用层身份验证和授权相比,Microsoft Entra 应用程序代理是一种更快速、更安全的解决方案。

提示

术语“本地”是一个旧术语,可追溯到物理服务器位于公司办公室本地的时间。 现在,许多自承载工作负荷在数据中心的虚拟机上运行。 本地和私有云上的术语可互换使用。

本文逐步讲解如何设置 Microsoft Entra 应用程序代理解决方案,以托管本机应用可以访问的 Web API 服务。

概述

下图显示了发布本地 API 的传统方法。 此方法需要开启传入端口 80 和 443。

传统 API 访问

下图显示如何使用 Microsoft Entra 应用程序代理安全发布 API,而无需开启任何传入端口:

Microsoft Entra 应用程序代理 API 访问

Microsoft Entra 应用程序代理是此解决方案的主干,可用作 API 访问的公共终结点,并提供身份验证和授权。 您可以使用 Microsoft 身份验证库(MSAL) 从大量平台访问您的 API。

由于 Microsoft Entra 应用程序代理身份验证和授权建立在 Microsoft Entra ID 之上,因此可以使用 Microsoft Entra 条件访问,确保只有受信任的设备才可访问通过应用程序代理发布的 API。 对于桌面设备,可使用 Microsoft Entra 联接或 Microsoft Entra 混合联接设备,而对于设备,可使用 Intune 托管设备。 还可以利用 Microsoft Entra ID P1 或 P2 功能,例如Microsoft Entra 多重身份验证,以及 Microsoft Entra ID 保护的机器学习支持的安全性。

先决条件

若要完成本演练,你需要:

  • Azure 目录的管理员访问权限,以及可用于创建和注册应用的帐户
  • Microsoft 身份验证库 (MSAL) 中的示例 Web API 和原生客户端应用

通过应用程序代理发布 API

若要通过应用程序代理在 Intranet 外部发布 API,请遵循与发布 Web 应用相同的模式。 有关详细信息,请参阅 教程:在 Microsoft Entra ID 中添加通过应用程序代理进行远程访问的本地应用程序

通过应用程序代理发布 SecretAPI Web API:

  1. 生成示例 SecretAPI 项目并将其发布为本地计算机或 Intranet 上的 ASP.NET Web 应用。 请确保可以在本地访问 Web 应用。

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

  3. 浏览到 Entra ID>企业应用程序

  4. 在“企业应用程序 - 所有应用程序”页的顶部,选择“新建应用程序”。

  5. “浏览Microsoft Entra 库 ”页上,找到“ 本地应用程序 ”部分,然后选择“ 添加本地应用程序”。 随即显示“添加自己的本地应用程序”页。

  6. 如果尚未安装专用网络连接器,系统会提示你安装它。 选择“下载专用网络连接器”以下载并安装连接器。

  7. 在“添加自己的本地应用程序”页面上添加信息。

    1. 在“名称”旁边,输入“SecretAPI”。

    2. 在“内部 URL”旁边,输入用于从 Intranet 中访问 API 的 URL。

    3. 确保 预身份验证 设置为 Microsoft Entra ID

    4. 选择“创建”,等待创建完应用。

    添加 API 应用

  8. 在“企业应用程序 - 所有应用程序”页上,选择“SecretAPI”应用。

  9. 在“SecretAPI - 概述”页上,选择左侧导航栏中的“属性”。

  10. 如果不希望在“MyApps”面板中向最终用户提供 API,则在“属性”页底部将“对用户可见”设置为“否”,然后选择“保存”。

    用户不可见

Web API 现在通过 Microsoft Entra 应用程序代理发布。 接下来,添加可访问该应用的用户。

  1. 在“SecretAPI - 概述”页上,选择左侧导航栏中的“用户和组”。

  2. 在“用户和组”页上,选择“添加用户”。

  3. 在“添加分配”页上,选择“用户和组”。

  4. 在“用户和组”页上,搜索并选择可以访问应用的用户,至少应包括你自己。 选择所有用户后,选择“选择”。

    选择并分配用户

  5. “添加分配 ”页上,选择“ 分配”。

注意

使用集成 Windows 身份验证的 API 可能需要 执行额外的步骤

注册本机应用并授予对 API 的访问权限

本机应用是为在特定平台或设备上使用而开发的程序。 在本机应用可以连接和访问 API 之前,必须在 Microsoft Entra ID 中进行注册。 以下步骤演示如何注册本机应用,以及如何向它授予访问通过应用程序代理发布的 Web API 的权限。

注册 AppProxyNativeAppSample 本机应用:

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

  2. 浏览到 Entra ID>企业应用>应用注册

  3. 选择“新注册”。

  4. 在“注册应用程序”页面上输入信息。

    1. 在“名称”下,输入 AppProxyNativeAppSample。

    2. 在“支持的帐户类型”下,选择“仅此组织目录中的帐户(仅 Contoso - 单一租户)”。

    3. 在“重定向 URL”下,使用下拉列表选择“公共客户端/本机(移动和桌面)”,然后输入 *https://login.microsoftonline.com/common/oauth2/nativeclient *。

    4. 选择“注册”,并等待应用成功注册。

      新应用程序注册

AppProxyNativeAppSample 应用现在 Microsoft Entra ID 中注册。 为本机应用提供访问 SecretAPI Web API 的权限:

  1. “应用注册 ”页上,选择 AppProxyNativeAppSample 应用。

  2. 在“AppProxyNativeAppSample”页上,选择左侧导航栏中的“API 权限”。

  3. 在“API 权限”页上,选择“添加权限”。

  4. 在第一个“请求获取 API 权限”页上,选择“我的组织使用的 API”选项卡,然后搜索并选择“SecretAPI”。

  5. 在下一个“请求获取 API 权限”页上,选中“user_impersonation”旁边的复选框,然后选择“添加权限”。

    选择一个 API。

  6. 返回“API 权限”页,你可以选择“为 Contoso 授予管理员许可”,以防止其他用户必须单独同意该应用。

配置本机应用代码

最后一步是配置本机应用。 代码必须添加到 Form1.cs 示例应用中的 NativeClient 文件中。 该代码使用 MSAL 库 获取令牌。 令牌请求 API 调用,并将其附加到请求中的标头。 令牌作为持有者证书附加。 有关 MSAL 的详细信息,请参阅 向项目添加 MSAL添加对 MSAL 的引用

  1. 在 Form1.cs 中,将命名空间 添加到代码。

  2. 在Microsoft身份验证库(MSAL)的身份验证上下文中编辑本机应用程序代码,以包含此 自定义代码示例

配置本机应用以连接到 Microsoft Entra ID,并使用应用程序代理调用 API。 然后,使用 Microsoft Entra ID 中的值更新 App.configNativeClient sample app 文件中的占位符值。

  1. 将“目录(租户) ID”粘贴到 字段中。 你可以从任一应用的“概述”页中找到并复制此值 (GUID)。

  2. 将 AppProxyNativeAppSample“应用程序(客户端) ID”粘贴到 字段中。 可以从 AppProxyNativeAppSample 的“概述”页(位于“管理”下的左侧导航)查找并复制此值(一个唯一标识符)。

  3. 将 AppProxyNativeAppSample“重定向 URI”粘贴到 字段中。 可以从 AppProxyNativeAppSample 的“授权”页(位于“管理”下的左侧导航)查找并复制此值(一个统一资源标识符)。 此步骤是可选的,因为 MSAL 使用 PublicClientApplicationBuilder.WithDefaultRedirectUri() 方法插入建议的答复统一资源标识符 (URI)。

  4. 将 SecretAPI“应用程序 ID URI”粘贴到 字段中。 该值与 todo:TodoListBaseAddress 相同。 可在 应用程序的“公开 API”页中找到 URI 值。SecretAPI 查看“管理”下的左侧导航栏。

  5. 将 SecretAPI“主页 URL”粘贴到 字段中。 可以从 SecretAPI 的“品牌和属性”(位于左侧导航中的“管理”下)查找并复制此值(一个 URL)。

注意

如果解决方案未生成并报告错误 invalid Resx file,请在解决方案资源管理器中展开 “属性”,右键单击 Resources.resx,然后选择“ 查看代码”。 为第 121 行到第 123 行添加注释。

配置参数后,生成并运行本机应用。 选择“登录”按钮时,应用程序会让你登录,然后显示成功屏幕,以确认它已成功连接到 SecretAPI。

屏幕截图显示消息“机密 A P I 成功”和“确定”按钮。

后续步骤