为客户端身份验证设置 Azure Active Directory

对在 Azure 上运行的群集,建议使用 Azure Active Directory (Azure AD) 来保护对管理终结点的访问。 本文介绍了如何设置 Azure AD 来对 Service Fabric 群集的客户端进行身份验证。

在本文中,“应用程序”一词用来指 Azure Active Directory 应用程序,而不是 Service Fabric 应用程序;将在必要时进行区分。 通过 Azure AD,组织(称为租户)可管理用户对应用程序的访问。

Service Fabric 群集提供其管理功能的各种入口点,包括基于 Web 的 Service Fabric ExplorerVisual Studio。 因此,将创建两个 Azure AD 应用程序来控制对群集的访问:一个 Web 应用程序和一个本机应用程序。 创建应用程序后,将用户分配到只读和管理员角色。

备注

在 Linux 上,请在创建群集之前完成以下步骤。 在 Windows 上,也可选择为现有群集配置 Azure AD 身份验证

备注

已知问题是在 Azure 门户中无法查看已启用 Linux AAD 的群集上的应用程序和节点。

先决条件

本文假设已创建了一个租户。 如果未创建,请先阅读如何获取 Azure Active Directory 租户

为了简化涉及到配置 Azure AD 与 Service Fabric 群集的一些步骤,我们创建了一组 Windows PowerShell 脚本。

  1. 将存储库克隆到计算机。
  2. 对于已安装脚本,确保具备所有先决条件

创建 Azure AD 应用程序并为用户分配角色

我们将使用这些脚本创建两个 Azure AD 应用程序来控制对群集的访问:一个 Web 应用程序和一个本机应用程序。 创建表示群集的应用程序后,将为 Service Fabric 支持的角色创建用户:只读和管理员。

运行 SetupApplications.ps1 并提供租户 ID、群集名称和 Web 应用程序回复 URL 作为参数。 另请指定用户的用户名和密码。 例如:

$Configobj = .\SetupApplications.ps1 -TenantId '0e3d2646-78b3-4711-b8be-74a381d9890c' -ClusterName 'mysftestcluster' -WebApplicationReplyUrl 'https://mysftestcluster.chinaeast.cloudapp.chinacloudapi.cn:19080/Explorer/index.html' -Location 'china' -AddResourceAccess
.\SetupUser.ps1 -ConfigObj $Configobj -UserName 'TestUser' -Password 'P@ssword!123'
.\SetupUser.ps1 -ConfigObj $Configobj -UserName 'TestAdmin' -Password 'P@ssword!123' -IsAdmin

备注

对于国家云(例如,Azure 中国云),还应指定 -Location 参数。

执行 PowerShell 命令 Get-AzureSubscription,可找到 TenantId 。 执行此命令,为每个订阅显示 TenantId。

将 ClusterName 用作脚本创建的 Azure AD 应用程序的前缀 。 它不需要完全匹配实际的群集名称。 旨在更加轻松地将 Azure AD 项目映射到其配合使用的 Service Fabric 群集。

WebApplicationReplyUrl 是 Azure AD 在完成登录过程之后返回给用户的默认终结点 。 将此终结点设置为群集的 Service Fabric Explorer 的终结点。 如果创建 Azure AD 应用程序来表示现有群集,请确保此 URL 与现有群集的终结点匹配。 如果为新群集创建应用程序,请计划群集将要拥有的终结点,并确保不使用现有群集的终结点。 默认情况下,Service Fabric Explorer 终结点为:

https://<cluster_domain>:19080/Explorer

系统会提示登录到具有 Azure AD 租户管理权限的帐户。 完成此操作后,脚本会创建 Web 和本机应用程序来代表 Service Fabric 群集。 在 Azure 门户中查看租户的应用程序时,应会看到两个新条目:

  • ClusterName_Cluster
  • ClusterName_Client

创建支持 AAD 的群集时,该脚本显示 Azure 资源管理器模板所需的 JSON,因此最好不要关闭 PowerShell 窗口。

"azureActiveDirectory": {
  "tenantId":"<guid>",
  "clusterApplication":"<guid>",
  "clientApplication":"<guid>"
},

有关排查 Azure Active Directory 设置问题的帮助

Azure AD 的设置和使用可能有一定难度,可以参考下面的一些指导来调试问题。

Service Fabric Explorer 提示选择证书

问题

成功登录到 Service Fabric Explorer 中的 Azure AD 后,浏览器返回到主页,但会出现提示用户选择证书的消息。

SFX 证书对话框

Reason

未在 Azure AD 群集应用程序中为用户分配角色。 因此,Service Fabric 群集的 Azure AD 身份验证失败。 Service Fabric Explorer 会故障回复到证书身份验证。

解决方案

遵循有关设置 Azure AD 的说明操作,并为用户分配角色。 此外,我们建议打开“访问应用需要的用户分配”,如 SetupApplications.ps1 所示。

使用 PowerShell 进行连接失败并出现错误:“指定的凭据无效”

问题

使用 PowerShell 以“AzureActiveDirectory”安全模式连接到群集时,成功登录到 Azure AD 后,连接失败并显示错误:“指定的凭据无效”。

解决方案

解决方案同上。

登录时,Service Fabric Explorer 返回失败信息:“AADSTS50011”

问题

尝试登录到 Service Fabric Explorer 中的 Azure AD 时,页面将返回失败信息:“AADSTS50011:回复地址 <url> 与为应用程序 <guid> 配置的回复地址不匹配。”

SFX 回复地址不匹配

Reason

代表 Service Fabric Explorer 的群集 (web) 应用程序尝试针对 Azure AD 进行身份验证,在执行请求的过程中提供了重定向返回 URL。 但是,该 URL 并未列在 Azure AD 应用程序的“回复 URL” 列表中。

解决方案

在群集的“Azure AD 应用注册”页上,选择“身份验证” ,然后在“重定向 URI” 部分下,将 Service Fabric Explorer URL 添加到列表中。 保存所做更改。

Web 应用程序回复 URL

登录时,通过 PowerShell 使用 Azure AD 身份验证连接到群集会生成错误:“AADSTS50011”

问题

尝试通过 PowerShell 使用 Azure AD 连接到 Service Fabric 群集时,登录页会返回故障:“AADSTS50011:在请求中指定的回复 URL 与为应用程序 <guid> 配置的回复 URL 不匹配。”

Reason

与前面的问题类似,PowerShell 尝试针对 Azure AD 进行身份验证,而 Azure AD 提供 Azure AD 应用程序的“回复 URL” 列表中未列出的重定向 URL。

解决方案

使用与上述问题相同的过程,但 URL 必须设置为 urn:ietf:wg:oauth:2.0:oob,这是命令行身份验证的特殊重定向。

使用 Azure AD 身份验证通过 PowerShell 连接群集

若要连接 Service Fabric 群集,请使用以下 PowerShell 命令示例:

Connect-ServiceFabricCluster -ConnectionEndpoint <endpoint> -KeepAliveIntervalInSec 10 -AzureActiveDirectory -ServerCertThumbprint <thumbprint>

若要了解详细信息,请参阅 Connect-ServiceFabricCluster cmdlet

是否可将同一个 Azure AD 租户用于多个群集?

是的。 请记得将 Service Fabric Explorer 的 URL 添加到群集 (Web) 应用程序。 否则 Service Fabric Explorer 无法正常工作。

为何启用 Azure AD 时仍然需要服务器证书?

FabricClient 和 FabricGateway 执行相互身份验证。 使用 Azure AD 身份验证时,Azure AD 集成可将客户端标识提供给服务器,服务器证书将由客户端用于验证服务器的标识。 有关 Service Fabric 证书的详细信息,请参阅 X.509 证书和 Service Fabric

后续步骤

在设置 Azure Active Directory 应用程序并为用户设置角色后,配置并部署群集