2009-02-03 77 views
7

我做了一個訪問CRM的Web服務的應用程序。問題是,當我將dll部署到Sharepoint服務器時,它返回了未經授權的401錯誤。顯然System.Net.CredentialCache.DefaultCredentials沒有工作(我的懷疑)。這是代碼。訪問CRM/Sharepoint Web服務中的DefaultCredentials

CrmSdk.CrmAuthenticationToken token = new CrmSdk.CrmAuthenticationToken(); 
token.AuthenticationType = AuthenticationType.AD; 
token.OrganizationName = ORGANIZATION_NAME; 

CrmService service = new CrmService(); 
service.Url = "http://crmserver:5555/mscrmservices/2007/crmservice.asmx"; 
service.CrmAuthenticationTokenValue = token; 
service.PreAuthenticate = true; 
service.Credentials = System.Net.CredentialCache.DefaultCredentials; 

反之亦然。

當我做了訪問Sharepoint的web服務(編碼插件)並將其部署到CRM服務器的應用程序。它無法訪問Sharepoint的Web服務。未經授權的錯誤。代碼如下:

Lists listService = new Lists(); 
listService.PreAuthenticate = true; 
listService.Credentials = System.Net.CredentialCache.DefaultCredentials; 
listService.Url = "http://sharepointserver/webname/_vti_bin/Lists.asmx"; 

我的CRM服務器和Sharepoint服務器位於同一個域中。

對於這兩個代碼,如果我將憑證部分更改爲類似這樣的東西,然後將其部署到服務器上,它可以運行。

service.Credentials = new NetworkCredential("username", "password", "domain"); 

不過,我不想這樣做,因爲它會在代碼中顯示用戶的密碼。任何人都可以幫我嗎?

兩臺服務器中的IIS都不允許匿名訪問,它使用集成Windows身份驗證。

謝謝


從我的本地計算機上,我可以訪問CRM Web服務或SharePoint Web服務。我想我是被授權的,因爲DefaultCredentials發送了我的憑據,其密碼保存在「存儲的用戶名和密碼」(控制面板>用戶帳戶>選項卡高級>管理密碼) 這樣,我不必須鍵入:

service.Credentials = new NetworkCredential("username", "password", "domain"); 

和我的本地comp的DefaultCredentials被授權訪問Web服務。

我試圖在訪問CRM Web服務的Sharepoint服務器上實現此功能。和..tadaa ..它不會工作。哈哈哈..

我們可以向服務器中的DefaultCredentials注入憑證嗎?

我想做的最後一件事是硬編碼useraccount(如上面的代碼)

回答

1

可能是你需要運行Kerberos進行身份驗證,但不能肯定,這是一個痛苦的設置只是去檢查。

+0

嗯..我已經檢查過,服務器使用Kerberos身份驗證。 任何其他選項或意見? :D 無論如何謝謝:D – cyrene 2009-02-03 07:00:54

1

您是否驗證過默認憑據與您明確聲明時相同?這可能是默認的credentails是你不希望的另一個帳戶。

編輯#1:每言論爲DefaultCredentials property on MSDN

DefaultCredentials代表在其中 運行應用程序的當前 安全上下文中 系統憑據。對於 客戶端應用程序,這些通常是運行該應用程序的 用戶的Windows憑據(用戶 名稱,密碼和域) 。對於 ASP.NET應用程序,默認的 憑證是已登錄用戶的用戶憑證 或被模擬的用戶 。

您還需要確保訪問CRM頁面(調用SharePoint Web服務)的用戶可以使用他們的憑據訪問Web服務,反之亦然。如果他們可以的話,那麼似乎更有可能發生某種模仿。

編輯#2:假設您可以同時訪問CRM和SharePoint服務器,那麼您可能會在應用程序和系統日誌中都達到峯值。其中一個或兩個應該可能指示登錄失敗並指示哪個帳戶嘗試訪問資源(在本例中是Web服務)。

+0

hm ...我沒有說明默認憑證的價值。我只是用它,而不是它本身應該找到所需的匹配憑證,然後將其發送到Web服務? 如何驗證默認憑證?因爲我們無法在其中看到用戶名和密碼,我們可以嗎? 謝謝:) – cyrene 2009-02-04 00:42:25

+0

增加了一個更新,您可以嘗試檢查日誌,他們可能會顯示失敗的登錄名並指向您試圖訪問服務的帳戶。 – 2009-02-06 04:26:46

0

service.Credentials = System.Net.CredentialsCache.DefaultNetworkCredentials;

試試看。

0

能夠使用的DefaultCredentials,在Active Directory用戶必須同時在SharePoint和CRM進行定義,並有足夠的權限做你的代碼做什麼。

並嘗試使用sdk(crm有助手類)而不是服務定義。

1

通過使用DefaultCredentials,意味着ASP.NET工作進程或IIS工作進程將獲取運行IIS應用程序池的用戶的憑據。

因此,如果您的Dynamics CRM應用程序池在用戶帳戶Custom-CRM-Domain \ JohnDoe下運行,這意味着它將採用用戶帳戶Custom-CRM-Domain \ JohnDoe下的權限。

請檢查運行CRM \ Sharepoint應用程序IIS Web應用程序的應用程序池的用戶帳戶。

這些檢查應用程序池的步驟:

  1. 打開網站 - >右鍵 - >選擇屬性
  2. 通知應用程序池名稱在下拉列表中選擇主目錄選項卡
  3. 現在,轉到應用程序池文件夾
  4. 嘗試查找已在步驟3→右鍵單擊中列出的應用程序池名稱,然後選擇屬性
  5. 選擇「標識」標籤,你會發現誰運行應用程序池

希望這有助於用戶帳戶。

0

爲了解決這個問題,您需要首先知道哪個用戶正在運行App池,如果您需要使用CredentialCache.DefaultCredentials,那麼您必須將用戶說svcadmin或類似的東西添加到「輔助站點收集管理員「通過運行SharePoint中央管理應用程序。由此SP允許證書已經通過的用戶訪問它需要的東西。 enter image description here