Exchange 2010 的单点登录选项

fre*_*eit 7 single-sign-on exchange-migration exchange-2010

我们正在开展一个项目,将员工电子邮件从 Unix/开源(courier IMAP、exim、squirrelmail 等)迁移到 Exchange 2010,并试图找出 Outlook Web Access 单点登录的选项。到目前为止,我发现的所有选项都非常丑陋且“无法支持”,并且可能根本不适用于 Forefront。

我们已经有了用于基于令牌的单点登录的JA-SIG CAS和用于 SAML 的Shibboleth。用户被定向到一个简单的内部门户(一个 Perl CGI,真的),他们用来登录到大多数东西。我们有一个 HA OpenLDAP 集群,它已经与另一个 AD 域同步,并将与 Exchange 将使用的 AD 域同步。CAS 针对 LDAP 进行身份验证。门户根据 CAS 进行身份验证。Shibboleth 使用 CAS 进行身份验证,但会从 LDAP 中提取其他数据。我们正朝着让 Web 服务针对 CAS 或 Shibboleth 进行身份验证的方向发展。(学生已经在使用 SAML/Shibboleth 认证的 Google Apps for Education)

使用 Squirrelmail,我们从门户页面链接到一个可怕的黑客攻击,该页面通过 CAS 进行身份验证,获取您的原始纯文本密码(是的,我知道,邪恶),并为您提供一个 HTTP 表单,其中预先填充了所有必要的 squirrelmail 登录详细信息,并使用 javaScript onLoad 东西立即提交表单。

试图确切地找出 Exchange/OWA 的可能性似乎很困难。“CAS”既是我们的单点登录服务器的首字母缩写,也是一个 Exchange 组件。据我所知,有一个 Exchange 插件可以执行 SAML,但仅用于联合诸如忙/闲日历信息之类的内容,而不是对用户进行身份验证。此外,它会花费额外的钱,因此无法对其进行试验以查看是否可以诱使它做我们想做的事情。

我们的 Exchange 集群计划涉及在 DMZ 前端 CAS 服务器中使用 Forefront Threat Management Gateway(新的 ISA)。

所以,真正的问题是:是否有人设法使 Exchange 使用 CAS(基于令牌的单点登录)或 SAML 进行身份验证,或者我可以合理地使用其中之一进行身份验证(例如任何接受 apache 身份验证的内容)?与最前沿?

如果做不到这一点,是否有人有一些技巧可以说服基于 OWA 表单的身份验证 (FBA) 让我们以某种方式“预登录”用户?(以他们的身份登录并将 cookie 传回给用户,或者给用户一个预先填写的表格,该表格会像我们使用 squirrelmail 那样自动提交)。由于多种原因,这是最不受欢迎的选项,但它(勉强)满足我们的要求。根据我从实施 Forefront 的人那里听到的,我们可能必须将 OWA 设置为基本身份验证并在 Forefront 中执行表单以进行身份​​验证,因此这甚至可能是不可能的。

我确实找到了CasOwa,但它只提到了 Exchange 2007,看起来有点吓人,据我所知,它几乎与我正在考虑与 CAS 服务器稍微集成的 OWA FBA hack 大致相同。看起来也没有很多人在这方面取得了很大的成功。它可能不适用于 Forefront。

还有“ CASifying Outlook Web Access 2 ”,但那个也让我感到害怕,并且涉及设置复杂的代理配置,这似乎更有可能被破坏。而且,再一次,它看起来不适用于 Forefront。

我是否缺少 Exchange SAML(OWA Federated whatchamacallit)中可以配置为进行用户身份验证而不仅仅是忙/闲访问授权的某些内容?

fre*_*eit 4

我们认为向 CAS 添加“ClearPass”和修改 Exchange 设置的组合将难以维护,因此我们最终的解决方案类似于我们不喜欢的 squirrelmail 解决方案。

也就是说,我们$something通过用户在我们的内部门户中按下的按钮向用户发送这样的 HTML(通常意味着已经正确转义的变量)。在这个版本中,最前沿只是简单地进行直接传递:

<html>
<body onLoad="javascript:document.forms[0].submit()">
<noscript>
 <h1>Redirecting you to $title</h1>
 <p>If you are not taken to $title within 15 seconds,<br />
    please click the button below:</p>
 </noscript>
 <form method="POST"
       action="https://$exchangehost/owa/auth/owaauth.dll" 
       name="logonForm" 
       enctype="application/x-www-form-urlencoded" autocomplete="off">
   <input type="hidden" name="destination" value="https://$exchangehost/OWA/" />
   <input type="hidden" name="flags" value="0" />
   <input type="hidden" name="forcedownlevel" value="0" />
   <input type="hidden" name="trusted" value="0" />
   <input type="hidden" name="username" value="$uid" />
   <input type="hidden" name="password" value="$password" />
   <input type="hidden" name="isUtf8" value="1" />
   <noscript>
     <input type="submit" value="$title" />
   </noscript>
 </form>
 </body>
 </html>
Run Code Online (Sandbox Code Playgroud)

这主要是通过复制登录表单并将所有内容都放入隐藏字段来实现的,但是您需要将操作上的 URL 从 更改/owa/auth.owa/owa/auth/owaauth.dll

我们还尝试让最前沿对 OWA 进行身份验证,这是该表单(其余<body onLoad=...>部分基本相同):

<form method="post" action="https://$exchangehost/CookieAuth.dll?Logon">
  <input type="hidden" name="curl" value="Z2FowaZ2F" />
  <input type="hidden" name="flags" value="0" />
  <input type="forcedownlevel" value="0" />
  <input type="formdir" value="1" />
  <input type="rdoPblc" value="1" />
  <input type="username" value="$domain\$uid" />
  <input type="password" value="$password" />
</form>
Run Code Online (Sandbox Code Playgroud)