分类: 云计算
2014-06-10 16:11:33
Windows Azure Pack 的验证遵循基于声明的原则,自带通过基于 ASP.NET 成员提供程序的自定义租户验证网站进行租户验证的功能,以及通过 Windows 验证网站进行管理员验证的功能。也可以使用 Active Directory 联合服务(AD FS)将这个堆栈与 Active Directory 集成。这已经在之前的博文系列中详细讨论过。如果需要使用其他身份提供程序向 WAP 提供身份,则强烈建议将它们与 AD FS建立联合,使用户能够登录 WAP。这样做有一些优势,例如能够将验证机制保留在企业内部,对于 AD FS 场拥有完全控制等等。
除了这些选项之外,还可以集成其他能够通过 WS 联合协议通信的安全令牌服务(STS)向 WAP 提供身份。例如 。可以利用 Azure 访问控制服务和 Azure Active Directory/ Office 365/ 组织 ID 帐户直接向 Windows Azure Pack 提供基于云的身份。如果已经是 Azure Active Directory 客户,已经将企业内部基于 Active Directory 的身份同步到 Windows Azure,则根据这篇文章,可以将 ACS 直接作为身份提供程序,中间不需要 AD FS。
这篇博文还会介绍如何将其他类似的身份提供程序与 WAP 建立联合。在这个练习末尾,您的环境看起来应该与下图类似:
用例
这篇博文介绍以下步骤:
前提条件
在 Windows Azure上创建访问控制命名空间
第一步是创建 ACS 命名空间。这是您的 STS,它负责生成 WAP 使用的签名身份令牌。这也是 WAP 信任的唯一 STS。
将 WAP 租户门户添加为 ACS 的依赖方
命名空间创建之后,必须告诉它,WAP 门户要从它这里得到令牌。根据联合的原则,期望从 STS 获得令牌的应用称为依赖方。所以在这个阶段,我们要让 ACS 知道 WAP 租户门户。
配置外部服务充当身份提供程序
设置了 ACS 和 WAP 门户之后,现在必须找到能够通过 ACS 进入 WAP 门户的身份来源。在这一节,我们将介绍 Google 这样的外部服务,下一节将介绍 Azure Active Directory。如果不考虑外部身份,可以跳过这节,进入配置 Azure Active Directory 和 ACS 小节。
提示:在使用 Google 时,我目前不确定是否有具体方法可以限定只有特定用户访问系统,因为 Google 只是对任何有效用户进行验证。但是,授权在 WAP 内进行,所以要想限制用户登录之后访问的资源,可以创建专用的计划,限制用户的使用。我认为一个可行的做法是使用 Google Apps 帐户管理一个用户集合,将它单独与 ACS 实例建立联合。(这个想法我自己还没有验证过,因此不能保证,但肯定是一条值得探索的道路。)我会继续探索寻找更好方法来进行这类验证,一旦找到更好的方法就会在这里更新
连接Azure Active Directory和ACS
我们更进一步,将 Azure Active Directory 加入 ACS。关于这个操作,请参阅以下详细教程:
关于将 O365 与 ACS 连接的操作指南,请参阅:
我不会重复以上博客的全部内容,而是假定您已经学习过它们,而且已经有了工作正常的 Azure Active Directory 或 Office 365 目录,已经准备就绪,已经有了一批用户。
下面两节摘录自以下博文:
首先,需要让 Active Directory 租户知道 ACS 命名空间的存在。Web SSO (在这个示例中,是 WS联合)端点不会为任何接收者发放令牌,只有服务主体对象代表的接收方才被视为合法。
到目前为止,Windows Azure Active Directory 门户尚未提供创建服务主体的命令,所以创建它的最直接方式就是使用 Office365 命令。这些命令可以从下载(请仔细阅读操作说明,尤其是与前提条件以及 x86 vs x64 平台有关的说明)。
1: Connect-MsolService
2: Import-Module MSOnlineExtended –Force
3:
4: $replyUrl = New-MsolServicePrincipalAddresses `
5: –Address https://windowsazurepacksts.accesscontrol.windows.net/
6:
7: New-MsolServicePrincipal –ServicePrincipalNames @("https://windowsazurepacksts.accesscontrol.windows.net/") `
8: -DisplayName "mywap ACS Namespace" `
9: -Addresses $replyUrl
在 ACS 命名空间中将Azure Active Directory作为一个ID 提供程序对外服务
声明转换规则
现在已经设置了依赖方和身份提供程序。接下来应该说明如何为这些身份提供程序转换进入的声明,以便依赖方能够理解它。我们使用 Rule Groups 做这件事,规则组是一个管理声明转换的规则集合。由于我们有两个身份提供程序,所以必须为每个提供程序创建一个规则。
提示:输入 'upn' 后,会得到带有完整规范名称的 UPN 建议。忽略这个建议,确保文本框中只有 'upn' 三个字母。
向下滚动,给这个规则一个说明,并单击 Save。
3. 重复以上过程,这次选择 Google 作为身份提供程序,选择作为传入声明类型,'upn' 作为传出类型。
4. 针对 Azure Active Directory 身份提供程序再执行一次。选择作为传入声明类型, 'upn' 作为传出类型。
好了!ACS 设好了,可以在 WAP 中使用了!
提示:可以使用这个过程将任何基于 WS 联合的身份提供程序与 ACS 建立联合,用它向 WAP 安装提供身份!
配置 WAP 门户使用 ACS
现在,ACS 方面的工作设置完成!余下的就是让 WAP 安装知道您要通过 ACS 提供身份,它应该从 ACS 查找签名的令牌,还提供签名证书。做法是,提供 WAP 门户、ACS 实例的联合元数据,就像通过 WAP 门户的元数据文件将 WAP 告知 ACS 一样。
1: $dbServer = 'azurepack\sqlexpress'
2: $dbPassword = 'pass@word'
3: $portalConfigStoreConnectionString = [string]::Format('Data Source={0};Initial Catalog=Microsoft.MgmtSvc.PortalConfigStore;User ID=sa;Password={1}', $dbServer, $dbPassword)
4:
5: Set-MgmtSvcRelyingPartySettings -Target @("Tenant") `
6: -MetadataEndpoint https://windowsazurepacksts.accesscontrol.windows.net/FederationMetadata/2007-06/FederationMetadata.xml `
7: -ConnectionString $portalConfigStoreConnectionString -DisableCertificateValidation
3. 打开浏览器,访问 WAP 租户门户
4. 请注意,现在被重定向到 ACS 登录页面,上面列出了刚刚配置的 Windows Live、 Google 和 Azure Active Directory 这几个选项。
5. 我选择 Google,输入我的 Google 凭据登录。
6. 由于这是我第一次通过 WAP 门户访问我的 Google 凭据,所以 Google 会询问是否应该信任这个应用程序,并与这个应用程序共享电子邮件地址和基本信息,请选择 Accept。
7. 现在会发生一系列的重定向,在这个过程中,身份令牌从Google 传递给 ACS,再传递给 WAP 门户,然后就用 Google 帐户登录 WAP。太棒了!!现在客户就能使用他们的Google 帐户登录 WAP 了!
真的就是这么容易!!
现在回到 WAP 租户门户,选择 Azure Active Directory 选项,将会进入对应的登录页面。
输入 AAD 凭据,可以看到重定向神奇地将您带回 WAP 门户。
好了!现在已经成功地使用 Azure Active Directory 和 ACS, Google 和 Windows Live 向 WAP 提供身份!
本文开头提到过,还可以使用这个指南与基于 WS 联合的其他 STS 建立联合,向 WAP 提供身份。要做到这点,必须像处理 ACS 一样在 STS 上执行类似步骤,并执行"配置 WAP 门户使用 ACS",用 STS 的数据替换联合元数据端点,就可以成功。