通过 AD FS 实现到 Windows Azure Pack 的联合身份 – 第 2 部分,共 3 部分
在前面的几篇博文中,Anders Ravnholt 讨论了 WAP 的安装和配置并讨论了使用 FQDN、端口和信任证书重新配置的细节。在这个系列中,我要讨论如何配置 AD FS,让它向 WAP 安装提供身份。
场景
Contoso 公司是一家服务提供商,托管了一个私有云环境,向他们的客户提供计算资源。Contoso 希望安装一个 Windows Azure Pack 堆栈并且实现以下功能:
- 向来自其 Active Directory 的用户提供管理访问
- 向来自 Fabrikam 公司(Contoso 的客户之一)的用户提供租户门户的自助服务。
在这个博文系列的第一部分,我们讨论了 Contoso 如何在他们的公司域中设置一个 AD FS 实例。
在这个第二部分中,我们将讨论 Contoso 如何设置 AD FS 实例和 WAP 管理门户之间的信任关系,并为它的用户提供到管理门户的访问。
在第三部分中,我们将讨论 Contoso 如何在 Fabrikam 的 AD FS 和自己的 AD FS 之间建立信任关系,让 Fabrikam 的用户访问租户门户。
人员
Rob 是基础结构管理员,负责维护基础结构。Rob 负责为 Contoso 公司安装 Windows Azure Pack。
Mary 是 Contoso Active Directory 中 pcloud.contoso.corp 域的管理员。Mary 拥有配置与这个域链接的 AD FS 所必需的权限。
Alan 是租户管理员,负责在 Windows Azure Pack 中创建和管理计划及订阅。
范围
在这个场景中,我们对环境有以下假设:
- 在 pcloud.contoso.corp 域已经设置了 Windows Azure Pack
- 环境中的所有组件都配置了来自可信 CA 的证书
- Alan 在 pcloud.contoso.corp 域中有一个用户 id
- 环境中的全部组件均已经配置了来自可信 CA 的证书
关于读者,我们也有以下假设:
- 熟悉 Windows Azure Pack 的安装。关于 Windows Azure Pack 部署的更多信息,请访问https://technet.microsoft.com/en-us/library/dn296432.aspx
- 对基于声明的验证有一定了解(请参阅白皮书https://download.microsoft.com/download/6/F/7/6F7BB9DD-0D65-492F-9180-75A47A520F80/Claims-Based Authentication in WAP.docx )
- 熟悉 AD FS 和 AD FS Console。关于 AD FS 的更多信息,请访问https://technet.microsoft.com/en-us/library/hh831502.aspx
- 这篇博文将介绍如何使用 AD FS 控制台执行这个场景
- 这篇博文不介绍如何使用 AD FS PowerShell 执行这个场景
AD FS 与 WAP 建立联合
为了让 AD FS 能够向 WAP 提供身份,需要在两个地方进行配置:
- Mary 是域管理员,她需要将 WAP 管理员门户作为 AD FS 的依赖方加进来。这样,AD FS 就知道管理员门户会向自己请求身份。
- Rob 能够访问基础结构,他需要配置 WAP 管理员门户,将用户转发,对他们的身份进行验证。
AD FS 配置
Mary 打开 AD FS 控制台,可以从 Server Manager 打开,或者从 mmc 控制台添加 AD FS 管理单元。
在 AD FS 控制台中,选择 “Relying Party Trusts” ,从 Actions 侧栏上单击 “Add Relying Party Trust” ,打开 “Add Relying Party Trust Wizard” 。
在 Select Data Source 步骤,Mary 通过向导从 WAP 管理员门户选择联合元数据设置。联合元数据文件通常位于
https://<adminPortalUri>/federationmetadata/2007-06/federationmetadata.xml
这个元数据文件也可以从以上位置下载,并以文件形式导入向导中。她为管理员门户指定友好显示名称并单击 Next。
向导的其余步骤配置多因素验证、发布授权规则等,目前这个场景不需要,所以保持默认值,完成向导即可。
成功添加依赖方之后,Mary 必须配置声明转换规则,这样 ADFS 才会知道向特定的依赖方发送什么声明,在这个示例中,依赖方是 WAP 管理员门户。WAP 门户可以理解两种声明,UPN 和 Group。所以在 AD FS 中必须创建四个规则来发出这些声明。
在 “Add Transform Claim rule Wizard” 中,选择声明规则模板 ”Send LDAP Attributes as Claims” 并单击 Next。
在下一步,Mary 提供一个友好名称,并选择 Active Directory 作为Attribute 库,在映射表中,将 User-Principal-Name 映射到传出的 UPN 声明。
重复相同的过程添加 Group Claim。选择 Token-Groups – Qualified by Domain 映射到传出 Group 声明。
在某些情况下,AD FS 可能已经有了一个 UPN。要处理这些场景,则需要额外添加两个规则,将 UPN 声明按原样传递。在 “Add Transform Claim rule Wizard” 中选择 “Pass Through or Filter an Incoming Claim” 。
在下一步,她提供规则的友好名称,将传入声明类型指定为 UPN 并单击 Finish。
现在依赖方的全部四个规则都已经添加进来,最后她单击 Apply,完成声明转换规则。
现在作为最后一步,Mary 必须为依赖方启用 JWT 令牌。这一步不能通过用户界面进行,所以她打开 PowerShell 窗口,确认刚刚添加的依赖方设置。命令如下:
1: Get-AdfsRelyingPartyTrust
11. 她注意到依赖方的身份通常是 “https://azureservices/AdminSite” ,确认 EnableJWT 值设为 False。现在需要将它设为 True 来启用 JWT 令牌。她使用以下命令来启用令牌:
1: Set-AdfsRelyingPartyTrust
现在,AD FS 的操作结束,可以继续了!
WAP 配置
Mary 配置完 AD FS 之后,基础结构管理员 Rob 就能接手了,他配置 WAP 管理员门户,将 AD FS加为身份提供程序。Rob 还必须赋予 Alan 管理计划和订阅以及维护 WAP 堆栈的权限。
- Rob 登录到 WAP 安装的机器,运行以下 PowerShell
1: $fqdn = 'adfs.pcloud.contoso.corp'
2: $dbServer = 'ContosoWAP'
3: $dbPassword = 'pass@word1'
4: $portalConfigStoreConnectionString = [string]::Format('Data Source={0};Initial Catalog=Microsoft.MgmtSvc.PortalConfigStore;User ID=sa;Password={1}', $dbServer, $dbPassword)
5:
6: Set-MgmtSvcRelyingPartySettings -Target Admin `
7: -MetadataEndpoint https://$fqdn/FederationMetadata/2007-06/FederationMetadata.xml `
8: -ConnectionString $portalConfigStoreConnectionString
$fqdn 变量包含的是 AD FS的联合服务名称
2. 现在余下的工作就是赋予 Alan 访问管理员门户的权限,即,将他添加为管理员。这项工作可以用以下 PowerShell 命令完成:
提示: Principal 参数指定的名称应该与 AD FS 提供的 UPN 精确匹配。
1: $dbServer = 'ContosoWAP'
2: $dbPassword = 'pass@word1'
3: $portalConfigStoreConnectionString = [string]::Format('Data Source={0};Initial Catalog=Microsoft.MgmtSvc.Store;User ID=sa;Password={1}', $dbServer, $dbPassword)
4:
5: Add-MgmtSvcAdminUser -Principal alanj@pcloud.contoso.corp -ConnectionString $portalConfigStoreConnectionString
3. 现在 Alan 能够用自己的凭据登录到管理员门户。
成功了! Alan 现在可以从这里管理 Windows Azure Pack。
下一部分将介绍租户面的内容,以及如何将 Fabrikam 的 AD FS 与 Contoso 建立联合,提供租户身份。