我在同一个农场中有两个SharePoint应用程序。

第1次使用 Classic Windows身份验证以及 NTLM 提供程序。

2使用声明身份验证,只有Windows认证提供程序( NTLM 也)。 我们还在构建一个Java应用程序(实际上是一个Liferay插件,但这已经超出了范围)。此应用程序必须从SharePoint应用程序抓取内容。

这是为第一个应用程序工作,但不是第二个应用程序(具有声称的那个)。

所以我的问题是:使用索赔身份验证时,使用NTLM认证提供程序,任何消费应用程序的先决条件是什么?

有帮助吗?

解决方案

我们终于找到了一个解决方案,包括改变客户端库。

特别使用这里描述的组件:支持ntlmv2使用JCIFS 使用Apache Httpclient。

我们使用的示例代码:

QueryServiceStub queryServiceStub = new QueryServiceStub("SHARE_POINT_ASMX_URL");
List authPrefs = new ArrayList(1);
authPrefs.add(AuthPolicy.NTLM);
AuthPolicy.registerAuthScheme(AuthPolicy.NTLM, JCIFS_NTLMScheme.class);
HttpTransportProperties.Authenticator auth = new HttpTransportProperties.Authenticator();
List<String> authScheme = new ArrayList<String>();
authScheme.add(HttpTransportProperties.Authenticator.NTLM);
auth.setUsername("USERNAME");
auth.setPassword("PASSWORD");
auth.setDomain("DOMAIN");
auth.setHost("SHAREPOINT_HOSTNAME");
auth.setAuthSchemes(authScheme);
queryServiceStub._getServiceClient().getOptions().setProperty(HTTPConstants.REUSE_HTTP_CLIENT, "true");
queryServiceStub._getServiceClient().getOptions().setProperty(HTTPConstants.AUTHENTICATE, auth);
List<Header> headers = new ArrayList<Header>();
Header header = new Header();
header.setName("X-FORMS_BASED_AUTH_ACCEPTED");
header.setValue("f");
headers.add(header);
queryServiceStub._getServiceClient().getOptions().setProperty(HTTPConstants.HTTP_HEADERS, headers);
.

许可以下: CC-BY-SA归因
scroll top