從頭完整設定 SharePoint 2010 與 ADFS v2
從頭完整設定 SharePoint 2010 與 ADFS v2
在這篇文章中,我將從頭逐步解說如何將 SharePoint 2010 與 ADFS v2 一起設定成使用 SAML 宣告驗證方法。 我將示範各個步驟及 PowerShell 指令碼,並儘量在一篇文章中寫出所有資訊。
首先概略談談要處理的元件,及所需處理的事項。 在本案例中,ADFS v2 是身分識別提供者,亦稱為 IP-STS (Security Token Service)。 我們需根據信賴憑證者 (簡稱 RP) 的資訊來設定 ADFS。 而本範例的 RP 即是 SharePoint,它須藉由 ADFS 來處理驗證並負責提供宣告。 就 SharePoint 層面來說,我們必須將它設定成信任傳送宣告的 IP-STS,還要設定將使用這些宣告的 Web 應用程式及網站。
第一步,先在 ADFS 中建立信賴憑證者。 請注意,這些設定的先後順序並沒有硬性規定,只是我通常習慣先設定 ADFS。 請移至 ADFS 的安裝伺服器,開啟 [AD FS 2.0 管理] (AD FS 2.0 Management) 應用程式,然後展開 [信任關係] (Trust Relationships) 節點,接著再按一下 [信賴憑證者信任] (Relying Party Trusts) 節點。
按一下右窗格中的 [新增信賴憑證者信任] (Add Relying Party Trust) 連結,隨即啟動 [新增信賴憑證者信任] (Add Relying Party Trust) 精靈。
按一下 [開始] (Start) 按鈕繼續執行。
選取 [手動輸入信賴憑證者資料] (Enter data about the relying party manually) 選項,然後按 [下一步] (Next) 按鈕。
輸入 [顯示名稱] (Display name),並輸入信賴憑證者的描述 (此為選用性),然後按 [下一步] (Next) 按鈕。
選取表示要使用 AD FS 2.0 設定檔的選項,然後按 [下一步] (Next) 按鈕。
您可以選取一個憑證以對 SAML Token 本身加密。 這個動作並不常執行,ADFS 會要求透過 SSL 連線至 SharePoint,因此 Token 的傳送通道已經過加密。 按 [下一步] (Next) 按鈕。
勾選 [啟用對 WS-同盟被動式通訊協定的支援] (Enable support for the WS-Federation Passive protocol) 核取方塊。 在通訊協定 URL 中,您需輸入 SharePoint Web 應用程式根網站的 URL,並包含 “_trust” 子目錄。 本範例的 SharePoint Web 應用程式 URL 為 https://seo14,所以 WS-同盟被動式通訊協定 URL 即是 https://seo14/_trust/。 輸入 URL 之後,按 [下一步] (Next) 按鈕。
對於信賴憑證者識別碼,您需輸入使用者登入上述 Web 應用程式時此應用程式要傳遞至 ADFS 的領域。 此領域的格式通常是 urn:foo:bar。 此領域會與某個 Web 應用程式相關聯,因此 ADFS 將依據此領域,比對登入要求是否與其擁有的信賴憑證者信任相符。 ADFS 在搭配 SharePoint 使用的情況下,會將此領域視為與登入要求相關聯,而對此領域進行檢查,找出信賴憑證者信任,接著在驗證使用者之後,它將查看 WS-同盟被動式通訊協定 URL,以了解後續要將使用者重新導向哪個位置。 以本範例而言,我輸入的領域稱為 urn:seo:sharepoint。 當我前往位於 https://seo14 的 SharePoint 網站時,系統就會將我重新導向到 ADFS,接著我將針對上述登入要求,將 SharePoint 設定成使用此領域 urn:seo:sharepoint。 一旦我通過 ADFS 的驗證之後,它會再將我重新導向到 https://seo14/_trust/,因為這個位址是該信賴憑證者的被動式通訊協定 URL。 請在這個欄位中新增要使用的領域,並另外記下此領域,因為在設定 SharePoint 時會用到。 然後按 [下一步] (Next) 按鈕。
在大多數情況下,您會希望所有使用者都能夠使用這個信賴憑證者。 因此本案例也將此假設為設定前提,所以請直接接受預設選項,然後按 [下一步] (Next) 按鈕。
如果此時您需要對信賴憑證者進行任何其他設定變更,請在此步驟中進行變更。 本案例並不需要進行任何變更,所以直接按 [下一步] (Next) 繼續執行。
至此已經完成信賴憑證者信任的設定,不過還需要建立宣告規則,好讓 ADFS 知道要將哪些宣告傳回給 SharePoint。 請將 [開啟編輯宣告規則對話方塊] (Open the Edit Claim Rules dialog) 方塊保留為選取狀態,然後按一下 [關閉] (Close) 按鈕。
現在準備建立新的規則,請按一下 [新增規則...] (Add Rule...) 按鈕。
此時要以宣告方式傳送 LDAP 屬性,因為這樣可以從 Active Directory 獲得資訊,表示要在 ADFS 中進行驗證,而 ADFS 將使用公司 Active Directory 對使用者進行驗證,以判別使用者屬性。 請將預設值保留為選取狀態,然後按 [下一步] (Next) 按鈕繼續執行。
先輸入宣告規則名稱,您可以任意命名。 接著,在 [屬性儲存區] (Attribute store) 下拉清單中選取 Active Directory。 下一步,就本案例來說,是要將電子郵件位址及使用者所屬的群組傳回給 SharePoint, 所以電子郵件位址將當成使用者識別碼,而且使用者所屬的所有群組也都會在 [角色] (Role) 宣告中送出。 設定此對應的作法,是在左邊下拉清單中選取所需屬性,然後在右邊下拉清單中選取該屬性要以哪種宣告送出。 在本範例中,所需屬性是 Active Directory 中的 [電子郵件地址] (E-Mail-Addresses),並以標準 [電子郵件] (E-Mail Address) 宣告送出此屬性。 另外,使用者所屬群組則是以標準 [角色] (Role) 宣告送出。 在本範例中,我選取的是 [Token-群組 – 不完整名稱] (Token-Groups – Unqualified Names),這是因為它會將群組名稱當成單一字串 (亦即該群組的名稱)。 您也可以送出群組的 SID,不過,當您要將 [角色] (Role) 宣告指定給 SharePoint 群組時,這在使用上就會變得很麻煩。 依照上述內容完成規則設定之後,請按一下 [完成] (Finish) 按鈕來完成規則設定。
按一下 [確定] (OK) 按鈕即完成在 ADFS 中建立信賴憑證者信任的工作。 在 ADFS 中的設定方面,這樣就已經足夠。 不過,還需要從 ADFS 取得另一項資訊。 由於 ADFS 會使用憑證來簽署其送出的 Token, 確保 Token 取用者所得到的 Token,在建立之後至今從未竄改過, 因此在設定 SharePoint 時,我們需要此憑證的副本,以便將 ADFS 設定成 IP-STS。 若要從 ADFS 取得這項 Token 簽署憑證,請展開 [服務] (Service) 節點,然後按一下 [憑證] (Certificates) 節點。
其中有個區段會列出 Token 簽署憑證。 您可能會有一或多個 Token 簽署憑證,但其中只有一個是「主要」Token 簽署憑證。 按一下該憑證,然後按一下右窗格中的 [檢視憑證] (View Certificate) 連結。
在這個特殊情況中,我選擇使用 ADFS 網站上為 SSL 建立的憑證。 這不代表您也要比照我的作法,更不建議您這麼做,這只是我個人的選擇。 現在您應該看到此憑證,請按一下對話方塊頂端的 [詳細資料] (Details) 索引標籤。
按一下 [複製到檔案...] (Copy to File...) 按鈕。 隨即啟動精靈,以將該憑證副本儲存到磁碟。
按 [下一步] (Next) 按鈕繼續執行。
您並不需要私密金鑰,所以接受預設設定,然後按 [下一步] (Next) 按鈕。
使用預設格式即可,所以按 [下一步] (Next) 按鈕繼續執行。
選取憑證的儲存位置,然後按 [下一步] (Next) 按鈕。 請務必記住這個位置,因為在後續步驟中,您需將此憑證從其儲存位置複製到 SharePoint 伺服器。
現在,您已擷取要在本機上複製此憑證所需的全部資訊,所以按一下 [完成] (Finish) 完成此精靈,並將此憑證儲存到本機檔案。 將此檔案複製到 SharePoint 伺服器,如此即完成 ADFS 伺服器的設定工作。
請轉至 SharePoint 伺服器來準備開始設定。 在開始設定 SharePoint 之前,建議您現在先建立新的 Web 應用程式。 請將該應用程式設定成使用宣告驗證,但在 [驗證設定] 中選取 [整合式 Windows 驗證 – NTLM]。 請確認您的 Web 應用程式已設定成使用連接埠 443,且選取的是 [使用 Secure Sockets Layer (SSL)] 選項按鈕。 完成 Web 應用程式建立之後,請記得移至 [IIS 管理員],然後編輯新虛擬伺服器的繫結,這樣您才能指派適當的 SSL 憑證。 這些步驟不在本文範圍內,不過網路上有許多文章詳述這些步驟。 重述一次重點,在本案例中,所建立的 Web 應用程式是使用 443 連接埠,並使用 SSL 安全性通訊協定,此 Web 應用程式的 URL 為 https://seo14。
在 SharePoint 伺服器上的第一個步驟,是將 ADFS 伺服器上所複製的 Token 簽署憑證新增到 SharePoint 伺服器。 不過要執行這個步驟之前,需先檢查一下憑證。 Token 簽署憑證的鏈結中可能有一或多個父憑證。 若是如此,便需要將該鏈結中所有憑證新增到 SharePoint 信任的根授權單位清單中。 要檢查憑證的話,先找出複製自 ADFS 的 Token 簽署憑證,對它連按兩下,隨即開啟憑證屬性視窗。 按一下 [憑證路徑] (Certification Path) 索引標籤,就會看到鏈結中是否有其他憑證。 就本案例來說,Token 簽署憑證中確實有個父憑證,這就是根憑證授權單位的憑證。
現在我要執行的動作就是,將位於 Token 簽署憑證上層的每個憑證,在本機上儲存其副本。 我的作法是按一下憑證,使對話方塊中出現 [檢視憑證] 按鈕, 按一下這個按鈕,另外開啟憑證的屬性對話方塊, 然後依照上述程序,將憑證副本儲存到磁碟上: 按一下 [詳細資料] (Details) 索引標籤、按一下 [複製到檔案...] (Copy to File...) 按鈕,然後在本機上將該憑證儲存成 .CER 檔案。 這就是本範例的作法,然後檔案儲存在 C:\adfsParent.cer。 所以現在我的 SharePoint 伺服器上有兩個憑證:
· C:\adfs.cer - 這是從 ADFS 伺服器複製的 Token 簽署憑證。
· C:\adfsParent.cer - 這是 Token 簽署憑證的父憑證。
現在兩個憑證都有了,接著要將它們新增到信任的根授權單位清單中。 我將在 PowerShell 中執行下面的指令碼,以新增這些憑證:
$root = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2("C:\adfsParent.cer")
New-SPTrustedRootAuthority -Name "Token Signing Cert Parent" -Certificate $root
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2("C:\adfs.cer ")
New-SPTrustedRootAuthority -Name "Token Signing Cert" -Certificate $cert
在 PowerShell 執行這些命令之後,出現下列輸出:
下一步,則是建立 SharePoint 所要用的宣告對應。 如果您還記得前面所提到,本案例要在 SharePoint 中使用電子郵件地址及角色宣告。 以下即是建立這些對應的 PowerShell 命令:
$map = New-SPClaimTypeMapping -IncomingClaimType "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress" -IncomingClaimTypeDisplayName "EmailAddress" -SameAsIncoming
$map2 = New-SPClaimTypeMapping -IncomingClaimType "https://schemas.microsoft.com/ws/2008/06/identity/claims/role" -IncomingClaimTypeDisplayName "Role" -SameAsIncoming
下一步,為 SharePoint 要用的領域建立變數。 如前面所述,本案例要用的領域稱為 urn:seo:sharepoint。 以下即是建立領域變數的 PowerShell 命令:
$realm = "urn:seo:sharepoint"
現在就可以開始建立 SPTrustedIdentityTokenIssuer。 在這個程序中,我會將所有設定資訊整合在一起,好讓 SharePoint 知道如何連線到 IP-STS 以使彼此結合運作。 以下列出 PowerShell 命令,然後再解釋其中重要部分。
$ap = New-SPTrustedIdentityTokenIssuer -Name "SAML Provider" -Description "SharePoint secured by SAML" -realm $realm -ImportTrustCertificate $cert -ClaimsMappings $map,$map2 -SignInUrl "https://congen1.contoso.local/adfs/ls" -IdentifierClaim "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"
“Name” 屬性是指,在設定 Web 應用程式所使用的驗證提供者時,顯示在此應用程式中的驗證提供者名稱; “realm” 屬性是指,在使用者登入時要讓 SharePoint 用於此受信任身分識別 Token 發行者的領域; “ImportTrustCertificate” 屬性是指,要匯入複製自 ADFS 伺服器的 Token 簽署憑證; “ClaimsMappings” 屬性是指,告訴此信任的身分識別 Token 發行者要使用哪些宣告; “SignInUrl” 是指,使用者應被重新導向所至的 URL,以便接受 IP-STS 的驗證, 在本範例中,我們希望使用者透過 Windows 整合式安全性以接受 ADFS 伺服器的驗證,所以將這些使用者傳送到 /adfs/ls 子目錄; 最後,“IdentifierClaim” 屬性則讓 SharePoint 知道哪一個是識別使用者時所用的宣告。 本範例是以電子郵件位址來識別使用者。
當最後一個 PowerShell 命令完成執行之後,SPTrustedIdentityTokenIssuer 就能用於 SharePoint Web 應用程式。 現在開啟瀏覽器,瀏覽到管理中心。按一下 [管理 Web 應用程式] 連結,然後在清單中按一下要使用 ADFS 進行驗證的 Web 應用程式,再按一下功能區中的 [驗證提供者] 按鈕。 在對話方塊中,按一下要使用 ADFS 進行驗證之區域的對應連結。 向下捲動到 [驗證類型] 區段。 現在您可以取消選取 NTLM,且應該會在信任的提供者清單中看到新的提供者稱為「SAML 提供者」。
勾選此提供者旁的方塊,然後按一下 [儲存] 按鈕儲存變更。 現在您可以為 Web 應用程式建立網站集合。 此程序的逐步說明亦不在本文範圍內,不過執行此程序時,必須謹記一件重要事項: 在新增網站集合管理員時,請務必以您身分識別宣告的格式輸入管理員名稱。 例如,在本範例中,身分識別宣告為電子郵件地址, 所以在新增網站集合管理員時,所用的名稱為 administrator@contoso.local,因為這個電子郵件位址屬於我要指定為網站集合管理員的使用者所有。
現在可以試試看能否進入這個新網站集合。 開啟瀏覽器,輸入 https://seo14 ,然後按 Enter。 系統第一個反應是將我重新導向到與此 Web 應用程式相關聯之 SPTrustedIdentityTokenIssuer 的 SignInUrl。 請回想一下建立 SPTrustedIdentityTokenIssuer 時所用的 PowerShell 命令,這個 Url 就是 https://congen1.contoso.local/adfs/ls。 所以在瀏覽器中輸入 SharePoint 網站的 URL 之後,會看到以下畫面:
現在您可以看到瀏覽器視窗中的 URL 指向 ADFS 伺服器,而在登入對話方塊背後的圖像是 ADFS 伺服器的圖像。 您可能還注意到,目前是使用 Windows 認證 (即 domain\user) 登入。 請記住,之所以能夠使用這個認證,是因為現在是在 ADFS 上進行驗證,而不是在 SharePoint 上。 由於 SharePoint 已設定成使用電子郵件位址作為身分識別,所以接下來必須透過通訊,才能在 ADFS 上進行驗證,ADFS 會使用上述建立的宣告規則,提取電子郵件地址及群組,並將這些資訊放入要傳回給 SharePoint 的宣告中。 等到我通過驗證之後,系統會將我重新導向,回到 https://seo14/_trust/ 的 SharePoint 上 (這是我在 ADFS 設定信賴憑證者時所設定的位址)。 在 SharePoint 取得 SAML Token 中的宣告並轉換成 SPUser 後,就完成了它應執行的驗證程序。 於是,我便能進入網站首頁。
您可以從網頁右上角的登入控制項看到,我的身分識別顯示成電子郵件地址,因為這是我的身分識別宣告。
這就是從頭至尾的完整程序,附帶一些說明。 根據這些指示,您可以藉由這整個程序完成網站設定,並使網站正常運作。
這是翻譯後的部落格文章。英文原文請參閱 Configuring SharePoint 2010 and ADFS v2 End to End