何時需要安裝自訂宣告提供者以在 SharePoint 2010 中進行搜尋
英文原文已於 2012 年 3 月 21 日星期三發佈
我們最近就自訂宣告提供者與搜尋等面向展開了幾回深切的檢討 (或是說挺有意思的討論)。結論是我們發現有些時候您必須在搜尋方塊上安裝自訂宣告提供者 (「方塊」的定義我稍後會解釋),才能使安全性調整在搜尋結果中正確運作。適用此方案的時機,則依您使用的是 FAST Search 2010 或 SharePoint Search 2010 而異。
首先我們可能需要對此稍作解釋。每當有使用者進行一項查詢時,就會解碼使用者 Token 中的宣告。但是 SiteData Web 服務 (也就是編目程式用以擷取內容相關的安全性資訊的服務),總是會傳回經過編碼的宣告。我們該如何解決這個問題呢?
在 FAST Search 2010 中,我們一律會在 FAST Search 2010 索引器儲存宣告之前,先將它解碼。要這麼做的原因是因為 FAST Query 伺服器並未安裝 SharePoint 的各式元件,無法為宣告進行編碼。要記得使用者宣告在來的時候是已經解碼的,因此為了對應到 SiteData Web 服務傳回的編碼宣告,使用者宣告必須要先編碼,才能進行比對。因為我們無法在 FAST Query 伺服器上安裝自訂宣告提供者,所以必須解碼從 SiteData Web 服務所取得的宣告;而若要這麼做的話,任何您正在使用的自訂宣告提供者,都必須安裝在 FAST Content SSA 中。如此一來我們才能解碼該宣告,並儲存已解碼的宣告,接著在出現已解碼的宣告時,我們才能進行對照。所以在 FAST 的情況中,我們考量的重點是要在編目期間使用自訂宣告提供者。
對於 SharePoint Search 2010,問題恰好相反。SharePoint 預期它會安裝到各處,因此它能正常運作的前提是,在查詢期間它能對來自使用者的宣告進行編碼,以便與為內容儲存的 ACL 相互對照。它會失效的情況,則是當您尚未將自訂宣告提供者部署到正在執行查詢處理器 (又稱為查詢和網站設定服務) 的伺服器時。在大多數的情況下,您會將自訂宣告提供者安裝到服務伺服器陣列中所有的伺服器上,像是 WFE 以及應用程式伺服器。查詢處理器必須有安裝此自訂宣告提供者,才能編碼該宣告。所以如果一切都在單一的伺服器陣列上運作,而您也在所有的伺服器上都安裝了自訂宣告提供者,那麼就應該不會有問題。我們最近發現的一個狀況 (也就是這篇文章的起因),是當您有一個獨立的服務伺服器陣列,而您又打算使用該伺服器陣列上的 SharePoint 搜尋服務時。在這樣的情況下您必須確定所有自訂宣告提供者,都已安裝到正在執行查詢和網站設定服務的服務伺服器陣列中的每部伺服器上。如果沒有做到這一點,您會發現使用者的自訂宣告無法進行評估,而導致不會為使用者傳回任何搜尋結果。
這是一個有趣的案例,讓我們動員了多位狠角色進行疑難排解,甚至還請出了我的天才小弟 Luca 以及 Sanjeev 和 Michael P.,才終於克服了重重難題。多謝各位的幫助,讓我們更進一步認識這個問題。
這是翻譯後的部落格文章。英文原文請參閱 When Do You Need to Install a Custom Claims Provider for Search in SharePoint 2010