使用 SAML 协议将 Web 应用与 VMware Horizon Workspace 集成
概述
企业应用管理的难题之一是几乎每位最终用户都需要访问大量的应用[SW1]。单点登录 (SSO) 是一种非常有效的方式,可以使用户更方便地访问应用,而且对企业更安全。
市场上一些SSO 解决方案以企业内联网上的集成式Active Directory (AD) 为基础[SW2]。此方法的一大缺点就是将 Web 应用限制在企业内联网内。这导致在部署选项方面缺乏灵活性,并且易受到安全威胁。
VMware HorizonWorkspace 使用安全断言标记语言 (SAML) 2.0 标准支持 SSO。这一支持提供了比集成式AD 解决方案更大的灵活性和更高的安全性。本文描述了 SAML 概念并显示如何使用 SAML 在 Horizon Workspace 中设置简单的 Web 应用,以帮助您了解 SSO 的实际应用。该文还介绍了用于支持SAML 2.0 与 Horizon Workspace 集成的 Web 应用的考虑事项和集成点。
此示意图描述了本文介绍的基本 SAML 流程涉及的角色。SAML 包含三个主要部分:
§SAML 身份标识提供程序是一个执行实际身份验证的系统。在此例中,Horizon Workspace 充当身份标识提供程序。
§SAML 服务提供程序是一个向用户提供服务的系统,如 Web 应用。这个系统不执行任何身份验证,而是依靠 SAML 身份标识提供程序来执行身份验证。
§Web 浏览器按以下描述的步骤访问这些提供程序,以完成身份验证流程。
流程步骤为:
1.使用浏览器访问身份标识提供程序,此例中为 Horizon Workspace。此时会进行用户身份验证。
2.在成功完成用户身份验证之后,身份标识提供程序会显示在其 Web UI(通过身份验证的用户可以访问的 Web 应用列表)中。
3.用户单击此列表中的一个Web 应用。
4.身份标识提供程序生成一个SAML 响应,进行签名,然后在浏览器上准备一个HTTP POST。该身份标识提供程序可以执行此签名流程,因为它拥有用于 SAML 身份验证的私钥。
5.浏览器执行到服务提供程序的分派URL 的HTTP POST。
6.服务提供程序通过HTTP POST在其分派URL 接收SAML 响应。服务提供程序拥有用于 SAML 身份验证的公用密钥并且利用公用密钥来验证 SAML 响应。一旦 SAML 响应通过验证,服务提供程序将授予通过身份验证的用户访问权限。
SAML 响应可能包含一个名称 ID以唯一标识用户。它还可能包含来自Horizon Workspace 的其他属性。
注意:本文中的 SAML 流程步骤反映了 Web 应用的一项简单可能性。也可以有其他步骤组合,但这些不在本文范围之内。
服务提供程序注意事项
在设计服务提供程序 Web 应用时,应考虑什么字段可用作每个用户帐户的唯一 ID。Horizon Workspace 可以配置为使用不同字段作为名称 ID。
默认情况下,名称ID是用户的电子邮件。使用此值的好处是简单易读。但是,如果用户帐户有可能改变用户电子邮件,则这种方法不是很理想。尤其是,如果现有用户的用户电子邮件改变了,他们可能被视为新用户。
另一个可以用作名称ID的字段是ExternalId。此 ID 可读性较低但具有全球唯一性。
另一个注意事项是用户帐户调配流程。服务提供程序 Web 应用可能需要存储与用户帐户有关的信息。在我们的示例应用中,会存储用户的登录次数 (logincount)。更复杂的应用可能会存储与用户有关的其他信息。对于要调配用户帐户的 Web 应用,Web 应用开发人员可以根据不同的要求采取不同方法,例如:
§自行调配:Web应用可以为任何传入的有效 SAML 响应自动调配新的帐户。我们的示例 Web 应用就是使用这种方法。
§需要批准:对于没有明确调配的用户,Web 应用可能会拒绝对传入的 SAML 响应的访问,即使该响应有效也不例外。在此例中,该 Web 应用拥有单独的管理功能,可以明确地批准和调配每一个新用户。
代码和配置示例
此部分介绍了在何处下载代码以用于提供的示例 Web 应用,以及如何配置在Horizon Workspace 中 Web 应用的代码。您可以从以下网址下载项目示例:
https://github.com/eucmobileproject/horizonphpsamldemo
请查看自述文件了解配置 Web 应用的步骤。
在服务提供程序Web 应用设置后,您可以配置 Horizon Workspace 以访问该应用。只需添加一个新 Web 应用。下面的屏幕截图显示了可用的选项:
具体而言就是配置 Horizon Workspace,使它与我们的示例应用协同工作。
1.选择 Configure Via > Manual configuration。
2.在Assertion Consumer和Recipient Name字段同时插入SAML 分派 URL。
3.选择一个Name ID Value。默认值为${user.Email}。
要验证此配置,请以授权用户身份登录,然后单击演示的 Web 应用 (SAML Demo) 以访问它。
用户帐户调配集成
在我们的示例 Web 应用中,一个名为samldispatch.php的 PHP 文件处理传入的SAML 响应。用户帐户的自行调配有以下步骤,由源代码示意图表示:
1. SAML 响应由 Horizon Workspace 使用HTTP POST发送到 Web 应用。
2. Web 应用通过使用POST数据生成 SAML 2.0 响应对象来处理 SAML 响应:
$samlResponse= new OneLogin_Saml_Response($settings, $_POST['SAMLResponse']);
3.在进行处理之前,由 Web 应用确定 SAML 响应是否有效:
if($samlIsValid) { .. . }
4.当该响应有效时,Web 应用可能还会提取 SAML 响应的属性:
if(!empty($attributes)) {
foreach($attributes as $attributeName => $attributeValues) {
foreach($attributeValues as $attributeValue) { .. . }
}
}
5.Web 应用确认此用户以前是否已登录过该 Web 应用。
注意:此逻辑依赖于应用。对于我们特定的示例,会保留名为accounts的 SQL 表以记录此用户帐户信息:
$sth= $dbh->prepare(“SELECT * FROM accounts WHERE nameid = :nameid”);
$sth->execute($selectdata);
if($result = $sth->fetch(PDO::FETCH_ASSOC)) { .. . }
6.如果用户帐户还未调配,将由 Web 应用自行调配。
注意:该自行调配逻辑依赖于应用。对于我们特定的示例,用户调配由插入 SQL 表中名为accounts的新行执行:
$insertsth=
$dbh->prepare(“INSERTINTO accounts (nameid, externalid, principalname, logincount) values (:nameid,:externalid, :principalname, :logincount)”);
$insertsth->execute($data);
会话映射
在大多 Web 应用中,需要[SW3]让用户保持会话状态。但是,在用户登录之前没有会话。因此,需要一种在使用 Horizon Workspace 执行单点登录时会创建 Web 应用会话的方法。该会话描述了将 SAML 响应映射到Web 应用会话的过程。
不同的 Web 应用使用不同的策略来处理会话。例如,一些 Web 应用使用 cookie,另一些 Web 应用使用 cookie 和服务器会话状态组合。在我们的Web 应用中使用PHP 会话机制。
具体来说,映射关系如下所示:
1. 名为samldispatch.php的 PHP 文件处理传入的 SAML 响应并检查该响应是否有效:
if($samlIsValid) { .. . }
2.在任何一个自行调配过程和用户帐户更新过程完成后,分派处理程序代码将立即启动会话:
session_start();
3. 会话映射发生在映射 SAML 响应时,尤其是唯一 ID nameid作为会话变量映射到会话时:
$_SESSION["nameid"]= $nameid;
4.其他 SAML 属性也可能会映射到 PHP 会话变量:
$_SESSION["userfirstname"]= $userfirstname;
$_SESSION["userlastname"]= $userlastname;
5.会话设置完成后,可从此 Web 应用的任何其他 PHP 页访问该会话。通过将浏览器重定向到 Web 应用的登入页,用户可立即使用该Web 应用:
header(“Location:main.php”);
exit;
项目示例还提供了一个注销链接。在上述会话映射后,Web 应用完全依赖 PHP 会话机制管理其会话。因此,注销会破坏 PHP 会话,例如,如下所示:
session_start();
session_destroy();
结论
本文描述了作为用于SSO 的解决方案的SAML[SW4],Horizon Workspace 作为身份标识提供程序支持SAML 2.0 的优点,以及如何设置自定义服务提供程序 Web 应用的讲解示范。
SAML规范和 Horizon Workspace 提供了一个丰富的配置可能性组合。本文使用一个基本组合来说明这些概念。所有不同变化都有可能。
本文展示的一项重要的集成功能是,如果 Horizon Workspace 在私有云中用作身份标识提供程序,则服务提供程序 Web 应用既可位于私有云中,也可位于公有云中。此灵活性为企业提供了多项优势:灵活的部署、无需提供内部访问权限即可外包 Web 应用部署的能力,以及不影响单点登录方便性的必要安全隔离能力。
原文资料来源:http://blogs.vmware.com/horizontech/2013/08/vmware-horizon-workspace-web-application-integration-saml-protocol.html