2017-08-22 58 views
0

我很努力通過MS SharePoint進行身份驗證來使用它的API。我一直在使用Google和Google一起玩這個問題,但不知何故,我找不到解決方案。迄今爲止最有前途的解決方案是基於這個answer如何使用MS SharePoint進行身份驗證以將其API用於Java?

我使用的依賴關係:

<groupId>org.apache.httpcomponents</groupId> 
    <artifactId>httpclient</artifactId> 
    <version>4.4.1</version> 
    </dependency> 

這是我的代碼:

public static void callRestEasyService() throws Exception { 
    CredentialsProvider credsProvider = new BasicCredentialsProvider(); 
    credsProvider.setCredentials(
      new AuthScope(AuthScope.ANY), 
      new NTCredentials("user", "password", "https://workstation.de", "domain.de")); 

    CloseableHttpClient httpclient = HttpClients.custom() 
      .setDefaultCredentialsProvider(credsProvider) 
      .build(); 

    try { 
     HttpGet httpget = new HttpGet("https://adress/_api/web/lists"); 

     System.out.println("Executing request " + httpget.getRequestLine()); 
     CloseableHttpResponse response = httpclient.execute(httpget); 
     try { 
      System.out.println("----------------------------------------"); 
      System.out.println(response.getStatusLine()); 
      EntityUtils.consume(response.getEntity()); 
     } finally { 
      response.close(); 
     } 
    } finally { 
     httpclient.close(); 
    } 

} 

的代碼是相當不言自明,我認爲,它基本上是被鏈接的答案表明正是。我的調查顯示,解決此問題的最佳方式是NTC保證。我也試着像基本驗證了一些其他的替代品,但在所有的情況下,我得到:

HTTP/1.1 401 Unauthorized 

我也試過using Samba JCIFS as an alternative NTLM engine

此外我有點害怕,也許工作站(第三個參數)或域的參數填寫不正確的我。該文檔說:

workstation - 認證請求源自的工作站。本質上,這臺機器的計算機名稱。

所以我嘗試填寫我的機器的名稱,但網絡上的很多示例都建議您使用您嘗試使用的URL進行身份驗證。這對我造成了一些困惑,但是沒有兩種方法可以使它工作。

有誰知道爲什麼這是或有一個可能的解決方案或解決方案,該問題? SharePoint可能會限制通過編程客戶端訪問嗎?據我所知,至少不可能從SharePoint中禁用API。任何想法/想法?

回答

0

我沒有設法得到它與Apache的HTTP客戶端,而不是這個我試圖從我的Java代碼運行一個cURL請求接近SharePoint API,這工作得很好,而不是。如果任何其他人有類似的問題,並希望嘗試一種解決方法,這是我的源代碼來運行卷曲要求:

ProcessBuilder pb = new ProcessBuilder(
      "curl", 
      "https://mysharepoint/_api/web/lists/getbytitle('listName')/items", 
      "-v", 
      "--ntlm", 
      "--negotiate", 
      "-u", 
      "user:password" 
    ); 

    Process p = pb.start(); 
    InputStream is = p.getInputStream(); 
    return createHashMapForStaff(convertStreamToString(is)); 

迴流管線(createHashMapForStaff(convertStreamToString(是))只是適應檢索。從SharePoint到我的需求的XML。Process p的InputStream基本上就是你所需要的。

相關問題