当服务器使用ADFS身份验证时,如何实现JavaSOAP客户端?

当服务器使用ADFS身份验证时,如何实现JavaSOAP客户端?,java,soap,cxf,soapui,adfs,Java,Soap,Cxf,Soapui,Adfs,我们正在使用cxf wsdl2java在Java中实现soap客户机。在以前的项目中,身份验证基于WS-Security或基本HTTP身份验证。这些都很容易在SoapUI中测试,也很容易在java中实现 不过,这一次,服务器使用Web应用程序代理作为反向代理,并使用ADFS Active Directory联合身份验证服务。我不知道这意味着什么,但在浏览器中打开wsdl端点URL时会发生什么,我们会被重定向到类似于office登录页面的登录页面,在该页面中,您在输入凭据之前手动单击帐户类型 当手

我们正在使用cxf wsdl2java在Java中实现soap客户机。在以前的项目中,身份验证基于WS-Security或基本HTTP身份验证。这些都很容易在SoapUI中测试,也很容易在java中实现

不过,这一次,服务器使用Web应用程序代理作为反向代理,并使用ADFS Active Directory联合身份验证服务。我不知道这意味着什么,但在浏览器中打开wsdl端点URL时会发生什么,我们会被重定向到类似于office登录页面的登录页面,在该页面中,您在输入凭据之前手动单击帐户类型

当手动登录时,我们会被重定向回wsdl端点,并在末尾附加?authToken=xxx,我认为该令牌会持续1小时。我们曾试图要求提供商使用更标准的身份验证,但目前这是我们唯一的选择。我们如何处理这个问题

当尝试从SoapUI执行测试请求时,我们只得到登录页面的完整html代码作为响应。我看到SoapUI中有一个基于表单的身份验证选项,但它不起作用,因为登录页面有多个帐户类型和多个用户名/密码字段。测试的解决方法只是手动登录并使用authToken。但是我们如何在JavaCXF客户机中实现自动化呢

在浏览器中连接到端点url时,url重定向到登录页面后的外观如下:


[adfs服务的url]/adfs/ls?version=1.0&action=signin&realm=urn%3AAppProxy%3Acom&appRealm=a10037ed-ca1e-e711-9436-00215a9b01ac&returnUrl=[wsdl端点url]&客户端请求id=13A5B5A6-B574-0000-6FBA-A51374B5D201

您不能使用SOAP通过登录屏幕向adfs进行身份验证。这是因为ADFS仅支持WS-Fed、SAML-P或OpenID Connect ADFS 4.0

您可以使用WS-Tust来实现这一点

WS-Fed支持两个配置文件,即。被动浏览器登录屏幕或主动web服务/WCF。你需要使用后者

ADF中有许多可用的活动配置文件终结点。默认情况下并非所有选项都已启用,因此您可能需要启用它们