2

我一直在从事一个项目,该项目使用 SPNEGO 为基于 Java 的 webapp 进行单点登录。目前,它与 Jetty + SPNEGO 和 Active Directory 一起成功运行,因此如果您访问我的测试页面,如果浏览器配置正确,它可以输出 auth_user 以及 Negotiate 令牌。

该项目的下一步是能够将该用户和令牌传递给 Exchange Web 服务作为身份验证,以便我可以访问远程用户交换目录(邮件、联系人等)

我已经运行 JAX-WS 从 Services.wsdl 文件生成存根文件,并且能够使用这些类连接到 Exchange。唯一的问题是它只会验证运行 Web 服务器的用户,而不是远程用户。

我还注意到我找不到将令牌传递给 EWS 的正确类,而不是用户名和密码。此外,生成的文件没有对 SPNEGO 的任何引用。

有谁知道可能的解决方案,或者看起来我必须手动生成 SOAP 调用而不是使用生成的类?

谢谢你的时间

4

2 回答 2

1

我认为,对 EWS 进行身份验证的最佳方式是使用运行 Web 服务器的用户。这是 Exchange Web 服务的“服务帐户”。此帐户需要权限“Exchange Web Services Impersonation”( ms-Exch-EPI-Impersonation)。

如果您想访问远程用户交换数据,您必须在呼叫中使用“交换模拟”。对于个人交换服务器用户(“充当帐户”),您必须通过设置“允许模拟个人交换信息”()权限来允许他可以模拟他们的服务帐户ms-Exch-EPI-May-Impersonate

因此,每个呼叫都使用相同的服务帐户进行身份验证,但随后您在呼叫中使用交换模拟充当特定用户/邮箱。

您的 web 应用程序中的单点登录用于确定当前用于交换模拟的“充当帐户”。为此,您需要用户电子邮件地址或 SID。

于 2010-08-09T22:08:55.523 回答
0

我们现在已经设法使用 Apache HTTP Client 4.1 alpha / Samba JCIFS 库并生成 SOAP 请求来启动和运行解决方案。这使我们可以让多个用户登录,而无需对其交换帐户进行任何配置。

我们确实使用了 HttpClient 3.1,但由于 NTLM 协议与较新版本的 windows 的更改而遇到问题,因此我们升级到最新版本。

于 2010-08-13T14:27:11.197 回答