Partager via


SharePoint 2010 和 Azure 存取控制服務的同盟 SAML 驗證 - 第 1 部分

英文原文已於 2011 年 5 月 6 日星期五發佈

注意:跟往常一樣,這個網站上的格式糟透了。建議您下載此文的 Word 文件附件,以便閱讀。

我最近一直用很感興趣的目光看待 Windows Azure 存取控制服務 (ACS),心裡想著一些不同的整合選項。SharePoint 2010 的宣告驗證以及如何整合 ADFS、Windows Live、Facebook 等,總是會有許多圖表。ACS (又稱為 Azure 藝術/行銷人員的 AppFabric ACS) 很不錯,因為它發行時包含這些常見識別提供者的「連接器」。當您設定 ACS 命名空間 (想像是含有連接器和組態設定的帳戶) 時,您已經簡化了 ADFS 2.0、Windows Live、Yahoo、Google 和 Facebook 的連線。像我這樣懶惰的程式設計師都會認為一定發生了什麼,因此,我決定從幾個不同角度進行查看。我會在這篇文章中說明第一個角度。

 

在這個案例中,我真的只想在 SharePoint 2010 和 ACS 之間建立直接信任。我想要可以使用 ADFS、Windows Live、Yahoo 和 Google 來驗證並進入我的 SharePoint 網站。我沒加入 Facebook,因為社交運算真的不適合我 (我盡量接近這個部落格),所以我沒有 Facebook 或 Twitter 帳號,總的說來,對於頻繁地與全世界分享沒意義的資訊這種事 (「Puffy 剛生了 3 個小孩 - 好可愛哦!!」),我一點興趣也沒有。我「不會」說明如何取得 Windows Azure 帳戶、建立存取控制服務命名空間、如何管理 ACS 等,網路上應該有一大堆 Windows Azure 使用者所提供的文章,所以,我不會嘗試重新撰寫那些文章。

 

我即將說明的是,設定各種信任、憑證和設定搭配運作所需的程序。在最後,我會加入幾張使用識別從每個提供者進行登入的螢幕擷取畫面。下列是執行步驟:

  1. 開啟存取控制管理頁面

    1. 登入 Windows Azure 管理入口網站。按一下左窗格中的 [服務匯流排] (Service Bus)、[存取控制] (Access Control) 和 [快取] (Caching) 功能表。按一下左窗格頂端的 [存取控制] (Access Control) (在 AppFabric 之下),按一下右窗格中您的命名空間,然後按一下功能區 [管理] (Manage) 部分中的 [存取控制服務] (Access Control Service) 按鈕。隨即會出現 [存取控制管理] (Access Control Management) 頁面。
  2. 為 ADFS 新增識別提供者

    1. 按一下左窗格中 [信任關係] (Trust Relationships) 功能表的 [識別提供者] (Identity providers)。
    2. 按一下 [新增] (Add) 連結
    3. 預設會選取 [WS 同盟識別提供者] (WS-Federation identity provider) 選項按鈕,請檢查是否未選取。這是 ADFS 2.0 所使用的提供者。請按 [下一步] (Next) 按鈕。
    4. 填寫 [識別提供者設定] (Identity Provider Settings) 區段
      1. 填寫顯示名稱,例如 “My ADFS Server”
      2. 對於 WS 同盟中繼資料,如果您的 ADFS 伺服器是透過網際網路公開,只要放入同盟中繼資料端點的 URL 即可。預設是在 https://yourAdfsServer.com/FederationMetadata/2007-06/FederationMetadata.xml。如果您的 ADFS 伺服器未公開到網際網路,請在您的本機瀏覽器中開啟端點的 URL。移至您的瀏覽器並將頁面以 .XML 檔案另存至本機檔案系統。然後,在 ACS 的 [識別提供者設定] (Identity Provider Settings) 中,按一下 [檔案] (File) 編輯方塊旁邊的選項按鈕,並使用 [瀏覽] (Browse) 按鈕尋找您剛儲存的同盟中繼資料 XML 檔案。

在 ACS 中建立識別提供者所需執行的步驟差不多就這些了。

3.        新增 SharePoint 的信賴憑證者

  1.  
    1. 您必須新增 SharePoint 做為 ACS 的信賴憑證者,就像您同時設定 SharePoint 和 ADFS 一樣。首先,請按一下左窗格中 [信任關係] (Trust Relationships) 功能表底下的 [信賴憑證者應用程式] (Relying party applications) 連結
    2. 按一下 [新增] (Add) 連結。
    3. 填寫 [信賴憑證者應用程式設定] (Relying Party Application Settings) 區段
      1. 輸入顯示名稱,例如 “SharePoint 2010”
      2. 使用 [手動輸入設定] (Enter settings manually) 預設模式
      3. 在 [領域] (Realm) 編輯方塊中輸入領域並加以儲存,因為當您在 SharePoint 中建立 SPTrustedIdentityTokenIssuer 時會再次用到。對於這個範例的用途,領域為 “urn:sharepoint:acs”。
      4. 對於傳回 URL,請使用與設定 SharePoint 做為 ADFS 信賴憑證者時所使用的相同格式:https://yourSiteName/_trust/
      5. Token 格式降級應為 SAML 1.1
      6. 您可以將 Token 週期 (秒) 設定為任何想要的值。預設為 10 分鐘;我將我的設定為 3600,也就是 1 小時。
    4. 填寫 [驗證設定] (Authentication Settings) 區段
      1. 檢查識別提供者底下的每個方塊;它應該會顯示您在上一個步驟中建立的 ADFS 識別提供者
      2. 在 [角色] (Rule) 群組底下,將預設值保持核取狀態,亦即 [建立新的規則群組] (Create new rule group)。
    5. 在 [Token 簽署設定] (Token Signing Settings) 中,您可以將預設選項保持選取狀態,亦即 [使用服務命名空間憑證 (標準)] (Use service namespace certificate (standard))。
    6. 按一下 [儲存] (Save) 按鈕儲存您的變更並建立信賴憑證者

4.        建立信賴憑證者的規則

  1.  
    1. 在這裡我假設,您不曾在 ACS 中建立一組規則,所以我們現在要建立新群組。如果您有想要重複使用的群組,則在上一個步驟中,您會是在要與信賴憑證者搭配使用的群組旁邊放置一個核取符號,而不是採用 [建立新的規則群組] (Create new rule group) 預設值。但是,由於我們要建立新的群組,所以,請按一下左窗格中 [信任關係] (Trust Relationships) 功能表底下的 [規則群組] (Rule groups) 連結
    2. 您應該會看到一個規則群組,命名為類似「您的信賴憑證者名稱的預設規則群組」。按一下該規則群組名稱的連結
    3. 目前應最先執行的動作,就是按一下 [產生] (Generate) 連結。它會自動為您建立一組規則,基本上,該規則會列舉您將從每個識別提供者取得的所有宣告,然後為透過含有與信賴憑證者相同宣告類型的宣告值而傳遞的每個提供者建立規則
    4. 在 [產生規則] (Generate Rules) 頁面上,只核取每個識別提供者旁邊的方塊,並按一下 [產生] (Generate) 按鈕。如此,就會依照先前所述的方式建立規則。完成時,您會被重新導向至 [編輯規則群組] (Edit Rule Group) 頁面,您會在其中看到所有列出的規則。在許多情況中,這或許已足夠,但是我們必須將這裡的一個異常情形納入考量。在 SharePoint 中,我們將使用電子郵件地址做為識別宣告。諷刺的是,所有識別提供者都會傳送到電子郵件地址 (並且具有為他們建立要執行這項操作的規則),除了 Windows Live 以外。到目前為止,以這個範例為例,我正在偽造 Windows Live。我的意思是,我會採用它所提供的一個宣告,nameidentifier ,並且建立規則以便將它傳回,但它會以電子郵件宣告的形式傳回。這不是痛恨 Steve 的時候,這只是讓示範環境以最少的移動組件 (已經有幾個) 執行的方式。現在,我們要加入這個最後的規則
    5. 按一下 [新增] (Add) 連結
    6. 在 [識別提供者] (Identity providers) 下拉式清單中選取 [Windows Live]
    7. 在 [輸入宣告類型] (Input claim type) 區段中,按一下 [選取類型] (Select type) 旁邊的選項按鈕:Windows Live ID 只支援一種宣告類型,所以它已經是選取狀態 (nameidentifier)
    8. 向下捲動至 [輸出宣告類型] (Output claim type) 區段,按一下 [選取類型] (Select type) 旁邊的選項按鈕:
    9. 在下拉式清單中找出 https://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress 並加以選取
    10. 如果您要的話,請輸入描述,然後按一下 [儲存] (Save) 按鈕儲存您的變更並建立規則
    11. 您會被重新導向至 [編輯規則群組] (Edit Rule Group) 頁面,然後按一下 [儲存] (Save) 按鈕儲存您的所有變更。現在您已完成 ACS 設定,但還不要關閉瀏覽器,因為當您建立及設定其他元件時,將會需要從中取得一些其他資訊。

5.        在 ADFS 中建立 ACS 的信賴憑證者

  1.  
    1. 當 ADFS 是 ACS 的識別提供者時,ACS 是 ADFS 的信賴憑證者。那表示我們需要在 ADFS 中設定信賴憑證者,以便在 ACS 將驗證要求重新導向至 ADFS 時,已經建立允許回應 ADFS 的信任。首先,移至您的 ADFS 伺服器,然後開啟 AD FS 2.0 管理主控台
    2. 移至 AD FS 2.0…[信任關係] (Trust Relationships)…[信賴憑證者信任] (Relying Party Trusts) 節點並按一下右窗格的 [新增信賴憑證者信任] (Add Relying Party Trust) 連結
    3. 按一下 [啟動] (Start) 按鈕開始精靈
    4. 使用預設選項匯入有關線上所發佈之信賴憑證者的資料。您需要使用的 URL 是在 ACS 管理入口網站內。返回已開啟入口網站的瀏覽器,並按一下左窗格中 [信任關係] (Trust Relationships) 功能表底下的 [應用程式整合] (Application Integration) 連結
    5. 複製顯示 WS 同盟中繼資料的 URL,並貼到 ADFS 精靈中的 [同盟中繼資料位址 (主機名稱或 URL):] (Federation metadata address (host name or URL):) 編輯方塊,然後按 [下一步] (Next) 按鈕
    6. 輸入顯示名稱以及一些附註 (選擇性),然後按 [下一步] (Next) 按鈕
    7. 保留允許使用者存取信賴憑證者的預設選項,並按 [下一步] (Next) 按鈕
    8. 按 [下一步] (Next) 按鈕,以便建立信賴憑證者
    9. 一旦建立了信賴憑證者,請開啟 ADFS 中的 [規則編輯器] (Rules Editor) 以建立新規則將宣告值傳遞至 ACS
    10. 在選取 [發行轉換規則] (Issuance Transform Rules) 索引標籤的情況下,按一下 [新增規則] (Add Rule) 按鈕
    11. 保留 [傳送 LDAP 屬性做為宣告] (Send LDAP Attributes as Claims) 的預設範本,然後按 [下一步] (Next) 按鈕。
    12. 填寫其餘規則詳細資料:
      1. 輸入宣告規則名稱
      2. 從 [屬性儲存區] (Attribute store) 下拉清單中選取 Active Directory
      3.  在 [LDAP 屬性的對應] (Mapping of LDAP attributes) 區段中,
        1. 將 LDAP 屬性 E-Mail-Addresses 對應至連出的宣告類型電子郵件地址
        2. 將 LDAP 屬性 Token-Groups – Unqualified Names 對應至連出的宣告類型角色
      4. 按一下 [完成] (Finish) 按鈕儲存您的規則。ADFS 設定現已完成。

6.        使用 ACS 設定 SharePoint 信任

  1.  
    1. 這是多個步驟的程序,從 ACS 取得 Token 簽署憑證開始。幸好,憑證隨附在 FederationMetadata.xml 檔案中,所以我們將從那裡擷取憑證,並將憑證儲存在本機 SharePoint 伺服器中。在 SharePoint Server 中,依上述開啟瀏覽器並開啟 [存取控制管理] (Access Control Management) 頁面
    2. 按一下左窗格中 [信任關係] (Trust Relationships) 功能表底下的 [應用程式整合] (Application Integration) 連結,複製顯示 WS 同盟中繼資料的 URL 並貼到您的瀏覽器。ACS FederationMetadata.xml 檔案隨即顯示在瀏覽器中。
    3. 尋找看起來像下面的區段 (大概是頁面頂端往下數的第二個主要區段):

<RoleDescriptor xsi:type="fed:SecurityTokenServiceType" protocolSupportEnumeration="https://docs.oasis-open.org/wsfed/federation/200706" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns:fed="https://docs.oasis-open.org/wsfed/federation/200706">

<KeyDescriptor use="signing">

<KeyInfo xmlns="https://www.w3.org/2000/09/xmldsig#">

<X509Data>

<X509Certificate>MIIDEDCCAfiblahblahblah</X509Certificate>

</X509Data>

 

複製 X509Certificate 元素中的資料並貼到記事本。以 .CER 副檔名儲存檔案 (編碼應為 ANSI);對於這篇文章的用途,我們假設您呼叫檔案 C:\AcsTokenSigning.cer。這是 ACS 的 Token 簽署憑證。

  1.  
    1. 將 ACS Token 簽署憑證加入 SharePoint 中信任的根授權單位清單中。您可以依 https://blogs.technet.com/b/speschka/archive/2010/07/07/managing-trusted-root-authorities-for-claims-authentication-in-sharepoint-2010-central-admin.aspx (可能為英文網頁) 所述執行此操作,也可以使用 PowerShell 來加入,如下所示;

 

$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2("c:\AcsTokenSigning.cer")

New-SPTrustedRootAuthority -Name "ACS Token Signing" -Certificate $cert

 

  1.  
    1. 下一個步驟是,建立新的 SPTrustedIdentityTokenIssuer。我在其他地方說明過這個步驟;您可以使用 https://blogs.msdn.com/b/sharepoint_cht/archive/2010/11/26/sharepoint-2010-adfs-v2.aspx 做為起點 (向下捲動到設定 ADFS 後出現的資訊)。有些事請記住:
      1. 名稱和 nameidentifier 都是 SharePoint 中的保留宣告類型,因此,即使 nameidentifier 是 ACS 的標準識別提供者中的唯一通用宣告,它也不是您的識別宣告選項。相反地,我建議現在只要回到電子郵件地址,並依照上述內容在 ACS 中加入適當規則。
      2. New-SPTrustedIdentityTokenIssuer 的 SignInUrl 參數應該指向您的 ACS 執行個體。例如 https://myAcsNamespace.accesscontrol.windows.net:443/v2/wsfederation。只要尋找為 ACS 在 ADFS 中設定的 [信賴憑證者] (Relying Party) 即可找到。開啟 [信賴憑證者屬性] (Relying Party properties) 對話方塊,按一下 [端點] (Endpoints) 索引標籤,並使用顯示 POST 繫結之 WS 同盟被動端點的 URL (應該是那裡的唯一一個)
    2. 最後一個步驟,就是建立您的 Web 應用程式,將它設定為使用宣告驗證和您為 ACS 建立的 SPTrustedIdentityTokenIssuer,最後在 Web 應用程式中建立網站集合並開始測試。

 

此時,您應該已就緒要點擊網站,試試看。請記住,您必須將網站集合管理員設定為其中一個識別提供者將傳回的一個電子郵件地址,如此,您就可以登入網站。一旦登入,您可以從提供者將電子郵件地址或角色宣告加入至 SharePoint 群組,就如您平常所預期般。

 

目前還有一個重點要再次記住的是,Windows Live ID。如這篇文章前面所述,您不會實際擁有 Windows Live 的有效電子郵件地址,因為您必須將他們呼叫 PUID 的內容加入 SharePoint 群組。基於測試的目的,取得內容最簡單的方式是使用 Windows Live ID 登入,然後您會到達 SharePoint 中指出您以 “foo” 身分登入的頁面,並且存取遭拒。您可以從那裡複製 PUID、以系統管理使用者的身分登入、將 PUID 加入 SharePoint 並且您應該可以前往。我還不曾看過何種目錄選項 (如果有) 適用於 Windows Live ID (我猜應該沒有)。但是,這是個開始,所以我們可以提議這個概念的證明。現在,我們已完成那項作業,下面是使用各種識別提供者登入我的網站時看起來的樣子:

 

登入頁面

ADFS

 

Google

 

Yahoo

 

Windows Live ID

 

 

這是翻譯後的部落格文章。英文原文請參閱 Federated SAML Authentication with SharePoint 2010 and Azure Access Control Service Part 1