Partager via


SharePoint 2010 中變更帳戶身分識別的 SPMigrateUsers 工具

英文原文已於 2012 年 6 月 3 日星期日發佈

在使用 SharePoint 時,有時會遇到想要或需要變更帳戶身分識別的情況。最典型的例子就是 SAML 宣告。在範例中我實際上使用電子郵件地址做為使用者的身分識別宣告;這樣做的原因是第一,大多數人都有電子郵件地址,而且第二,大多數的使用者都瞭解電子郵件地址。但是,偶爾我會被使用電子郵件地址這招所擊敗,因為大家會變更電子郵件。當電子郵件地址變更時,很明顯地所有取得的權限都會中斷。老實說,我不認為這是常常會發生的情況,否則我一開始就不會使用電子郵件地址了。然而,這情況確實偶而會發生,所以如果您所有的 SharePoint 都是以電子郵件進行保護時,該怎麼辦呢?

在我先前發表過關於 IMigrateUserCallback 介面的部落格文章中,說明了如何就此項進行控制:https://blogs.msdn.com/b/sharepoint_cht/archive/2011/03/24/windows-saml.aspx 在文章中我說明了如何使用此介面移轉身分識別,並提供如何將 Windows 宣告身分識別轉換為 SAML 宣告身分識別的範例。而我現在要做的是寫一個小的 Windows 應用程式,讓您可以進入想要變更的憑證,然後讓它執行您所需要的修改。目標是要用簡單的單次性工具進行這些變更,但您也可以使用原始程式碼 (我會將它貼在本篇中) 並進行修改,以進行更有創意的應用,例如從檔案或資料庫讀入使用者清單,並自行進行比對。

此工具的優點是可以實際上運用於多種不同的情況。也就是說,它不僅可用於將電子郵件地址轉換成其他內容,也可以使用它轉換群組名稱。有些人告訴我應該要在群組名稱中使用 SID (亦即在 SAML 中使用角色宣告),因為如果重新命名該群組時,SID 會維持不變。雖然這是正確的,但我要重申一下,第一,我不覺得經常會有變更的需要;第二,有多少人想要開始鍵入群組 SID 名稱,並把它們新增至 SharePoint 群組 (如果您的答案是肯定的,要趕快去看醫生喔),以及第三,除了您的本機 Active Directory 之外,SID 不具任何意義。當您移到像是 Azure、Google、Yahoo、Facebook 等雲端架構服務時,您的 SID 會像輸入 [您自己寫上 "像…一樣無用" 的笑話吧] 一樣無用。

此工具的另一項優點,是它不會限制您只能在單一類型提供者當中進行變更。想要將 Windows 群組變更為 SAML 角色宣告嗎?沒問題!想要將 SAML 身分識別宣告變更為 FBA 成員使用者嗎?沒問題!想要將 FBA 角色變更為 AD 群組嗎?沒問題!現在看出來了吧?我幾乎寫出來了各種提供者之間所有不同的「使用者」與「群組」的組合,而且到目前為止,全都可以成功地轉換過來再轉換回去。

希望此工具使用起來很簡單直接;以下是它的螢幕擷取畫面:

第一次啟動應用程式時,會載入所有應用程式的清單。它會為每個 Web 應用程式在下方填入兩個下拉式方塊,列出該 Web 應用程式所使用的所有提供者清單。如果您有多個 SAML 提供者或多個 FBA 提供者,每個都會列在下拉式清單中。您只要選取要移轉出的提供者,以及要移轉入的提供者即可。在 [宣告值] (Claim Value) 區域中輸入想要移轉的值,以及想要移轉成的值。只要在 [純文字值] (Plain Text Value) 的編輯欄位中輸入值,然後按一下身分識別宣告按鈕 (左側) 或群組宣告按鈕 (右側) 即可。視您使用的身分識別提供者之不同,會出現詳細的文字敘述說明,而且按鈕上的文字也會隨之變更以更符合說明。

例如,假設您目前只使用 SAML 驗證,同時想要將電子郵件地址 "steve@contoso.com" 移轉為 "stevep@contoso.com"。您要挑選 Web 應用程式,而且要在每個下拉式清單中預設會選取 SAML 驗證。然後在 [在值之前] (Before Values) 區段中,於 [純文字值] (Plain Text Value) 的編輯內輸入 "steve@contoso.com",然後按一下 [識別宣告] (ID Claim) 按鈕;如此會將正確的編碼宣告值填入 [編碼值] (Encoded Value) 編輯中。下一步,在 [在值之後] (After Values) 的 [純文字值] (Plain Text Value) 編輯中輸入 "stevep@contoso.com"。再按一下 [識別宣告] (ID Claim) 按鈕,讓正確的值填入 [編碼值] (Encoded Value) 編輯方塊中。(注意:在上列螢幕擷取畫面中,[在值之後] (After Values) 區段中的按鈕會標示為 [使用者] (User) 而非 [識別宣告] (ID Claim),因為在該範例中是從 SAML 宣告移轉到 Windows 宣告)。將所有想要的值輸入後,只要按一下 [移轉] (Migrate) 按鈕即可完成程序;移轉完成之後,會出現訊息方塊通知您。

在許多不同的 Web 應用程式以及一些不同的驗證類型之間測試的過程中,我確實遇到了一些狀況,在此提出以備您之後有類似情況時所需。有一個狀況是當我試著移轉某一特定 Web 應用程式的使用者時,發生了 [拒絕存取] 的錯誤訊息。我一直沒辦法追蹤此錯誤的發生原因,最多只能判定可能該 Web 應用程式有地方不穩定,但我也無法確定,因為它在我伺服器陣列中的其他四個或五個 Web 應用程式中運作正常。

此外,另一次是在成功移轉完畢之後,我無法以移轉後的使用者登入。進一步研究後發現,我選擇要移轉的帳戶無法進入 IMigrateUserCallback 功能 (亦即這是 SharePoint 的問題,而不是此應用程式的編碼問題)。如果您發生這種情況,建議您使用原始程式碼以及 Visual Studio 進行逐步偵錯程式,以確保會呼叫您要移轉的帳戶。但不幸的是,我只有一個孤單的 FBA 成員使用者曾經被這問題難倒過。

最後一件要注意的事情是,如果您將帳戶從某個值移轉為另一值,然後以新的使用者登入時,卻在歡迎頁面右上方角落發現舊的帳戶名稱等,請勿驚慌。移轉功能只會變更帳戶名稱。如果使用者資訊完全變了,只要您更新使用者設定檔,就會在下次設定檔系統進行同步時,將正確的資訊更新到所有的網站集合中。

以上說明完畢,希望您使用它並希望它對您有用。如同我之前所說,我也同時附上了完整的原始程式碼,歡迎自行使用並視您的需求逕行修改。

這是翻譯後的部落格文章。英文原文請參閱 The SPMigrateUsers Tool for Changing Account Identities in SharePoint 2010