Microsoft Entra 应用程序代理提供对本地 Web 应用程序的安全远程访问。单一登录到 Microsoft Entra ID 后,用户可以通过外部 URL 或内部应用程序门户访问云端和本地的应用程序。例如,应用程序代理可以为远程桌面、SharePoint、Teams、Tableau、Qlik 和业务线 (LOB) 应用程序提供远程访问和单一登录功能。
Microsoft Entra 应用程序代理:
简单易用。用户可像访问 Microsoft 365 以及其他与 Microsoft Entra ID 集成的 SaaS 应用一样访问你的本地应用程序。无需更改或更新应用程序即可使用应用程序代理。
安全。本地应用程序可以使用 Azure 的授权控制和安全分析功能。例如,本地应用程序可使用条件访问和双重验证。应用程序代理不要求通过防火墙打开入站连接。
经济高效。本地解决方案通常需要设置和维护隔离区 (DMZ)、边缘服务器或其他复杂的基础结构。应用程序代理在云中运行,易于使用。若要使用应用程序代理,无需更改网络基础结构或在本地环境中安装其他设备。

一、创建应用代理
1、至少以应用程序管理员的身份登录到Azure Portal 访问 Microsoft Entra ID,浏览到“管理”>“企业应用程序”。
2、选择“新建应用程序” 。然后选择“配置应用程序代理以安全地远程访问本地应用程序”。点击创建。

3、在“添加自己的本地应用程序”部分中,提供有关应用程序的以下信息 。注:URL 需要以 http 或 https 开头,以“/”结尾,URL 应为域名,而非 IP 地址。

4、创建好后可以在企业应用中找到应用名称查看。

5、接下来在内部服务器上安装IIS 服务用于测试(测试过程中安装了验证方法)。

6、在Microsoft Entra ID的应用代理中 下载connector services 安装包。

7、下载好后在代理服务器上进行安装。中国区安装需要添加如下参数\MicrosoftEntraPrivateNetworkConnectorInstaller.exe ENVIRONMENTNAME=AzureChinaCloud


安装成功后使用管理员登录。
8、登录成功后,稍等一下,可以在应用代理中看到应用代理服务器的名字和状态。如下显示为活动状态即可。

二、添加用于测试的用户
将用户添加到应用程序之前,请验证该用户账户是否有权从企业网络内部访问应用程序。
1、添加测试用户:
选择“企业应用程序”,然后选择要测试的应用程序 。
选择“用户和组”,然后选择“分配用于测试的用户” 。

2、在“用户和组”下,选择“添加用户” 。
选择要添加的账户。依次选择“选择”、“分配” 。


三、测试登录
测试对应用程的身份验证:
1、从要测试的应用程序中,选择“应用程序代理”。复制外部链接测试访问。

预验证方式选择Entra ID

2、登录的时候需要使用上面分配的用户登录才可以访问内部站点。

3、 登录后可以正常访问内网的服务了。

三、使用自定义域名
如果使用自定义域名,需要添加并验证自定义域名后,才可选择自定义域名。
1、在 Microsoft Entra ID 中,浏览到”>“企业应用程序”>找到您的应用,在“应用程序代理”中找到“外部 URL”字段,向下滚动查看列表,再选择你想要使用的自定义域。

2、并提前在DNS服务商处设置DNS CNAME 记录。如:web1.*****.cn -> web1-<tenantname>.msappproxy.cn

验证域名解析

3、测试生成自定义证书
注:使用自定义域名需要上传匹配域名的证书。为了测试方便我们此处使用自签发证书。主要验证上传证书功能,如果在实际场景中建议购买证书使用(必须使用 PFX 证书包含私钥,以确保包含所有必需的中间证书,才能保证验证的完整性)。
命令参考
$certname = "web1.*******.cn" ## Replace with your web server
$cert = New-SelfSignedCertificate -Subject "CN=$certname" -CertStoreLocation "Cert:\CurrentUser\My" -KeyExportPolicy Exportable -KeySpec Signature -KeyLength 2048 -KeyAlgorithm RSA -HashAlgorithm SHA256

该证书只为测试,生成后使用mmc导出pfx。
4、选择自定义域名后,可以看到添加证书链接。在应用代理中进行添加证书。

5、添加后可以通过自定义域名访问(注:如下演示证书为自定义证书,报错为正常。有的浏览器可能会不允许继续访问,建议使用edge测试)。

四、为Windows 验证设置SSO
在AAD joined 的设备上测试访问,测试用户为Tom jones。
1、首先确认用户有权访问应用代理:

2、然后设置IIS服务器
(i)在IIS 上启用windows 集成验证,禁用匿名访问

(ii)确认web 服务器如下位置为true 为了使用计算机账户解析Kerberos Ticket

(iii)注册SPN到 web应用 计算机账户
setspn -A HTTP/<IIS service name> <VMhostname>
我的web 服务器名称为membertest2,服务名称可以根据自己需要选择(该测试membertest2为IIS 服务器)

(iv)注册后在活动目录和计算机中找到该设备的SPN并授权到应用代理的服务上(该测试中安装应用代理的计算机为ADFSserver)


以上为IIS服务器上 的设置,仅供参考。
3、设置后通过同步到AAD的用户tom jones (该用户为本地用户同步到AAD)登录 AAD joined的计算机访问,会有如下提示:

4、下面我们配置SSO,转到我们创建的应用注册,选择Single Sign-on 并选择Windows Integrated Authentication

5、填写之前建立的SPN并保存

6、使用AAD 加入的客户端访问,不用再次验证直接可以打开页面访问。

相关参考:
https://learn.microsoft.com/zh-cn/entra/identity/app-proxy/application-proxy-add-on-premises-application
https://learn.microsoft.com/zh-cn/entra/identity/app-proxy/how-to-configure-custom-domain
https://techcommunity.microsoft.com/blog/iis-support-blog/setting-up-kerberos-authentication-for-a-website-in-iis/347882
https://learn.microsoft.com/zh-cn/entra/identity/app-proxy/how-to-configure-sso

