使用Java+单点登录;Exchange 2007 EWS

使用Java+单点登录;Exchange 2007 EWS,java,jax-ws,exchange-server-2007,single-sign-on,spnego,Java,Jax Ws,Exchange Server 2007,Single Sign On,Spnego,我一直在从事一个项目,该项目使用SPNEGO对基于Java的webapp进行单点登录。目前,它正在与Jetty+SPNEGO和Active Directory成功合作,因此如果您访问我的测试页面,它可以输出auth_用户以及协商令牌(如果浏览器配置正确) 项目的下一步是能够将该用户和令牌作为身份验证传递给Exchange Web服务,以便我可以访问远程用户Exchange目录(邮件、联系人等) 我已经运行JAX-WS从Services.wsdl文件生成存根文件,并且能够使用这些类连接到Excha

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

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

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

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

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


感谢您抽出时间

我认为,针对EWS进行身份验证的最佳方法是使用运行web服务器的用户。这是您用于Exchange Web服务的“服务帐户”。此帐户需要“Exchange Web服务模拟”权限(
ms Exch EPI模拟

如果要访问远程用户交换数据,则必须在通话中使用“exchange模拟”。对于个人exchange server用户(“充当帐户””),您必须通过设置权限“允许模拟个人exchange信息”(
ms Exch EPI可能模拟”
)来允许服务帐户模拟他们

因此,每个呼叫都使用相同的服务帐户进行身份验证,但随后在呼叫中使用exchange模拟作为特定的用户/邮箱


webapp中的单一登录用于确定用于exchange模拟的当前“代理帐户”。为此,您需要用户的电子邮件地址或SID

我们已经使用Apache HTTP Client 4.1 alpha/Samba JCIFS库并生成SOAP请求,成功地建立并运行了一个解决方案。这使我们可以让多个用户登录,而无需对其exchange帐户进行任何配置


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

当时,我不得不以编程方式生成实际的SOAP请求,而不使用wsdl。由于使用java.net.Authenticator保存凭据,不同用户登录时出现问题。我想说,整个wsdl/axis或jax-ws方法都有缺陷。我确实尝试过重用SPNEGO令牌,但因为我没有生成它,所以总是失败。验证器仅在第一次调用时初始化,因此这应该是Web服务器的用户,即您的EWS服务帐户。我认为这里不可能使用每个远程用户。然后应使用Exchange模拟进行调用。如果您使用wsdl创建代理类或以编程方式生成SOAP请求,我认为这种机制是相同的?如何为呼叫指定每个用户的密码?