使用Windows凭据从Java客户端调用受保护的IIS Web服务

时间:2014-07-08 15:25:15

标签: java web-services iis soap axis

我正在构建一个需要从Web服务获取一些数据的Java应用程序。我已经获得了一个wsdl文件和我需要的所有信息,但是获得了401代码,未经授权。执行Web服务的人告诉我,IIS中的Web服务目录必须关闭匿名身份验证,因此我需要传递Windows凭据。我已经谷歌搜索了一段时间的解决方案,但没有找到任何不直接传递用户名和密码的东西。我需要做的是使用用户登录到Windows的凭据,以便不再需要输入用户名和密码。有人有这方面的经验吗?我发现了一些名为SPNEGO的东西,但它也直接使用了用户名和密码。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

你没有写,你使用哪个webservice框架(我假设你没有手动创建和发送soap-request)。

我认为通过http-basic身份验证保护了Web服务。

如果我是你,我会使用测试工具soapUI进行快速测试,该工具支持针对您的Web服务的此功能并检查,如果是这种情况 (见:http://www.soapui.org/SOAP-and-WSDL/authenticating-soap-requests.html

如果您将成功,则需要在http-header区域内传递用户和密码。 (请参阅此处的“客户”部分:http://en.wikipedia.org/wiki/Basic_access_authentication获取示例值)

答案 1 :(得分:0)

是的,抱歉,忘记提到我正在使用轴。尽管如此,最终设法对服务进行了身份验证,因为事实证明它并没有使用基本身份验证,而是使用NTLM。所以现在我做这样的事情:

    BAWebServiceLocator locator = new BAWebServiceLocator(getEngineConfiguration());
    BAWebServiceSoap baWebServiceSoap = locator.getBAWebServiceSoap(url);

    ((Stub)baWebServiceSoap).setUsername(props.getProperty("username"));
    ((Stub)baWebServiceSoap).setPassword(props.getProperty("password"));

所以我仍然需要传递我的用户名和密码。我想要做的是使用我登录到Windows的凭据。有什么想法吗?