使用 Azure Active Directory B2C 設定 SAML 身分識別提供者的註冊和登入
Azure Active Directory B2C (Azure AD B2C) 支援與 SAML 2.0 識別提供者的同盟。 本文說明如何使用 SAML 身分識別提供者用戶帳戶來啟用登入,讓使用者使用其現有的社交或企業身分識別登入,例如 ADFS 和 Salesforce。
開始之前,請使用 [選擇原則類型 選取器] 來選擇您要設定的原則類型。 Azure Active Directory B2C 提供兩種方法來定義使用者如何與您的應用程式互動:透過預先 定義的使用者流程 ,或透過完全可設定 的自定義原則。 本文中每個方法所需的步驟都不同。
此功能僅適用於自定義原則。 針對安裝步驟,請在上述選取器中選取 [自定義原則 ]。
案例概觀
您可以設定 Azure AD B2C,讓使用者使用來自外部社交或企業 SAML 識別提供者 (IdP) 的認證來登入您的應用程式。 當 Azure AD B2C 與 SAML 識別提供者同盟時,它會做為服務提供者,起始 SAML 識別提供者的 SAML 要求,並等候 SAML 回應。 在下圖中:
- 應用程式會起始對 Azure AD B2C 的授權要求。 應用程式可以是 OAuth 2.0 或 OpenId 連線 應用程式或 SAML 服務提供者。
- 在 Azure AD B2C 登入頁面中,用戶選擇使用 SAML 身分識別提供者帳戶登入(例如 Contoso)。 Azure AD B2C 會起始 SAML 授權要求,並將用戶帶到 SAML 識別提供者以完成登入。
- SAML 識別提供者會傳回 SAML 回應。
- Azure AD B2C 會驗證 SAML 令牌、擷取宣告、發出自己的令牌,並將使用者帶回應用程式。
必要條件
- 完成開始使用 Active Directory B2C 中的自定義原則中的步驟。
- 如果您尚未這麼做, 請註冊 Web 應用程式。
解決方案的元件
此案例需要下列元件:
- SAML 識別提供者 ,能夠接收、譯碼及回應來自 Azure AD B2C 的 SAML 要求。
- 您識別提供者的公開可用 SAML 元數據端點 。
- Azure AD B2C 租使用者。
重要
您的端點必須符合 Azure AD B2C 安全性需求。 舊版 TLS 和密碼已被取代。 如需詳細資訊,請參閱 Azure AD B2C TLS 和加密套件需求。
建立原則金鑰
若要建立 Azure AD B2C 與 SAML 識別提供者之間的信任,您必須提供有效的 X509 憑證與私鑰。 Azure AD B2C 會使用憑證的私鑰簽署 SAML 要求。 識別提供者會使用憑證的公鑰來驗證要求。 公鑰可透過技術配置檔元資料存取。 或者,您可以手動將 .cer 檔案上傳至 SAML 識別提供者。
大部分情況下都可以接受自我簽署憑證。 針對生產環境,建議使用證書頒發機構單位所簽發的 X509 憑證。 此外,如本檔稍後所述,針對非生產環境,您可以停用這兩端的 SAML 簽署。
取得憑證
如果您還沒有憑證,您可以使用自我簽署憑證。 自我簽署憑證是一種安全性憑證,不是由證書頒發機構單位 (CA) 簽署,也不會提供 CA 所簽署憑證的安全性保證。
在 Windows 上 ,使用 PowerShell 中的 New-SelfSignedCertificate Cmdlet 來產生憑證。
執行下列 PowerShell 命令來產生自我簽署憑證。
-Subject
視您的應用程式和 Azure AD B2C 租使用者名稱,修改自變數,例如contosowebapp.contoso.onmicrosoft.com
。 您也可以調整日期,-NotAfter
為憑證指定不同的到期日。New-SelfSignedCertificate ` -KeyExportPolicy Exportable ` -Subject "CN=yourappname.yourtenant.onmicrosoft.com" ` -KeyAlgorithm RSA ` -KeyLength 2048 ` -KeyUsage DigitalSignature ` -NotAfter (Get-Date).AddMonths(12) ` -CertStoreLocation "Cert:\CurrentUser\My"
在 Windows 計算機上,搜尋並選取 [管理用戶憑證]
在 [憑證 - 目前使用者] 底下,選取 [個人>憑證>] yourappname.yourtenant.onmicrosoft.com。
選取憑證,然後選取 [動作>所有工作>導出]。
選取 [下一步>是],導出私鑰>[下一步]。
接受匯出檔格式的預設值,然後選取 [下一步]。
啟用 [密碼] 選項,輸入憑證的密碼,然後選取 [ 下一步]。
若要指定儲存憑證的位置,請選取 [流覽 ] 並流覽至您選擇的目錄。
在 [ 另存新檔 ] 視窗中,輸入 檔名,然後選取 [ 儲存]。
選取 [下一步>完成]。
若要讓 Azure AD B2C 接受 .pfx 檔案密碼,密碼必須使用 Windows 證書存儲匯出公用程式中的 TripleDES-SHA1 選項加密,而不是 AES256-SHA256。
上傳憑證
您必須將憑證儲存在 Azure AD B2C 租使用者中。
- 登入 Azure 入口網站。
- 如果您有多個租使用者的存取權,請選取頂端功能表中的 設定 圖示,從 [目錄 + 訂用帳戶] 功能表切換至您的 Azure AD B2C 租使用者。
- 選擇 Azure 入口網站 左上角的 [所有服務],然後搜尋並選取 [Azure AD B2C]。
- 在 [概觀] 頁面上,選取 [ 身分識別體驗架構]。
- 選取 [ 原則密鑰 ],然後選取 [ 新增]。
- 針對 [ 選項],選擇
Upload
。 - 輸入 原則金鑰的 [名稱 ]。 例如:
SAMLSigningCert
。 前置詞B2C_1A_
會自動新增至金鑰的名稱。 - 瀏覽並選取具有私鑰的憑證 .pfx 檔案。
- 按一下 [建立]。
設定 SAML 技術配置檔
將 SAML 識別提供者新增至 原則擴充檔案中的 ClaimsProviders 元素,以定義 SAML 識別提供者。 宣告提供者包含 SAML 技術配置檔,可決定與 SAML 識別提供者通訊所需的端點和通訊協定。 若要使用 SAML 技術設定檔新增宣告提供者:
開啟 TrustFrameworkExtensions.xml。
尋找 ClaimsProviders 元素。 如果不存在,請在根元素底下新增它。
新增 ClaimsProvider,如下所示:
<ClaimsProvider> <Domain>Contoso.com</Domain> <DisplayName>Contoso</DisplayName> <TechnicalProfiles> <TechnicalProfile Id="Contoso-SAML2"> <DisplayName>Contoso</DisplayName> <Description>Login with your SAML identity provider account</Description> <Protocol Name="SAML2"/> <Metadata> <Item Key="PartnerEntity">https://your-AD-FS-domain/federationmetadata/2007-06/federationmetadata.xml</Item> </Metadata> <CryptographicKeys> <Key Id="SamlMessageSigning" StorageReferenceId="B2C_1A_SAMLSigningCert"/> </CryptographicKeys> <OutputClaims> <OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="assertionSubjectName" /> <OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="first_name" /> <OutputClaim ClaimTypeReferenceId="surname" PartnerClaimType="last_name" /> <OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="http://schemas.microsoft.com/identity/claims/displayname" /> <OutputClaim ClaimTypeReferenceId="email" /> <OutputClaim ClaimTypeReferenceId="identityProvider" DefaultValue="contoso.com" /> <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" /> </OutputClaims> <OutputClaimsTransformations> <OutputClaimsTransformation ReferenceId="CreateRandomUPNUserName"/> <OutputClaimsTransformation ReferenceId="CreateUserPrincipalName"/> <OutputClaimsTransformation ReferenceId="CreateAlternativeSecurityId"/> <OutputClaimsTransformation ReferenceId="CreateSubjectClaimFromAlternativeSecurityId"/> </OutputClaimsTransformations> <UseTechnicalProfileForSessionManagement ReferenceId="SM-Saml-idp"/> </TechnicalProfile> </TechnicalProfiles> </ClaimsProvider>
使用相關值更新下列 XML 元素:
XML 元素 | 值 |
---|---|
ClaimsProvider\Domain | 用於 直接登入的功能變數名稱。 輸入您想要在直接登入中使用的功能變數名稱。 例如, Contoso.com。 |
TechnicalProfile\DisplayName | 此值會顯示在登入畫面上的 [登入] 按鈕上。 例如, Contoso。 |
Metadata\PartnerEntity | SAML 識別提供者元數據的 URL。 或者,您可以複製識別提供者元數據,並在 CDATA 元素 <![CDATA[Your IDP metadata]]> 內新增它。 |
對應宣告
OutputClaims 元素包含 SAML 識別提供者所傳回的宣告清單。 將原則中定義的宣告名稱對應至識別提供者中定義的判斷提示名稱。 檢查您的識別提供者以取得宣告清單(判斷提示)。 如需詳細資訊,請參閱 宣告對應。
在上述範例中, Contoso-SAML2 包含 SAML 識別提供者所傳回的宣告:
- assertionSubjectName 宣告會對應至 issuerUserId 宣告。
- first_name 宣告會對應至 givenName 宣告。
- last_name 宣告會對應至 姓氏 宣告。
- 宣告
http://schemas.microsoft.com/identity/claims/displayname
會對應至 displayName 宣告。 - 沒有名稱對應的電子郵件 宣告。
技術設定檔也會傳回識別提供者未傳回的宣告:
- 包含識別提供者名稱的 identityProvider 宣告。
- 具有 socialIdpAuthentication 預設值的 authenticationSource 宣告。
新增 SAML 會話技術設定檔
如果您還沒有 SM-Saml-idp
SAML 會話技術設定檔,請將一個新增至您的擴充原則。 找出 區 <ClaimsProviders>
段並新增下列 XML 程式碼片段。 如果您的原則已經包含 SM-Saml-idp
技術設定檔,請跳至下一個步驟。 如需詳細資訊,請參閱 單一登入會話管理 。
<ClaimsProvider>
<DisplayName>Session Management</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="SM-Saml-idp">
<DisplayName>Session Management Provider</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.SSO.SamlSSOSessionProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<Metadata>
<Item Key="IncludeSessionIndex">false</Item>
<Item Key="RegisterServiceProviders">false</Item>
</Metadata>
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
新增使用者旅程圖
此時,識別提供者已設定,但尚未在任何登入頁面中提供。 如果您沒有自己的自訂使用者旅程圖,請建立現有範本使用者旅程圖的重複專案,否則請繼續進行下一個步驟。
- 從入門套件開啟 TrustFrameworkBase.xml 檔案。
- 尋找並複製包含
Id="SignUpOrSignIn"
之 UserJourney 元素的整個內容 。 - 開啟 TrustFrameworkExtensions.xml 並尋找 UserJourneys 元素。 如果專案不存在,請新增一個。
- 貼上您複製為 UserJourneys 元素子系之 UserJourney 元素 的 整個內容。
- 重新命名使用者旅程圖的識別碼。 例如:
Id="CustomSignUpSignIn"
。
將識別提供者新增至使用者旅程圖
現在您已擁有使用者旅程圖,請將新的識別提供者新增至使用者旅程圖。 您必須先新增登入按鈕,然後將按鈕連結至動作。 動作是您稍早建立的技術設定檔。
尋找在
Type="CombinedSignInAndSignUp"
使用者旅程圖中包含 或Type="ClaimsProviderSelection"
的協調流程步驟元素。 通常是第一個協調流程步驟。 ClaimsProviderSelections 元素包含使用者可以登入的識別提供者清單。 元素的順序會控制向使用者呈現的登入按鈕順序。 新增 ClaimsProviderSelection XML 元素。 將 TargetClaimsExchangeId 的值 設定為易記名稱。在下一個 協調流程步驟中,新增 ClaimsExchange 元素。 將識別碼 設定為目標宣告交換識別碼的值。將 TechnicalProfileReferenceId 的值 更新為您稍早建立之技術設定檔的識別碼。
下列 XML 示範使用者旅程圖的前兩個協調流程步驟與識別提供者:
<OrchestrationStep Order="1" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="api.signuporsignin">
<ClaimsProviderSelections>
...
<ClaimsProviderSelection TargetClaimsExchangeId="ContosoExchange" />
</ClaimsProviderSelections>
...
</OrchestrationStep>
<OrchestrationStep Order="2" Type="ClaimsExchange">
...
<ClaimsExchanges>
<ClaimsExchange Id="ContosoExchange" TechnicalProfileReferenceId="Contoso-SAML2" />
</ClaimsExchanges>
</OrchestrationStep>
設定信賴憑證者原則
信賴憑證者原則,例如 SignUpSignIn.xml ,會指定 Azure AD B2C 將執行的使用者旅程圖。 尋找信賴憑證者 內的 DefaultUserJourney 元素。 更新 ReferenceId 以符合您新增識別提供者的使用者旅程圖識別碼。
在下列範例中 CustomSignUpSignIn
,針對使用者旅程圖, ReferenceId 會設定為 CustomSignUpSignIn
:
<RelyingParty>
<DefaultUserJourney ReferenceId="CustomSignUpSignIn" />
...
</RelyingParty>
上傳自訂原則
- 登入 Azure 入口網站。
- 在入口網站工具列中選取 [ 目錄 + 訂 用帳戶] 圖示,然後選取包含 Azure AD B2C 租使用者的目錄。
- 在 Azure 入口網站中,搜尋並選取 [Azure AD B2C]。
- 在 [原則] 底下 ,選取 [ 身分識別體驗架構 ]。
- 選取 [ 上傳自訂原則 ],然後上傳您變更的兩個原則檔案,順序如下:擴充原則,例如
TrustFrameworkExtensions.xml
,然後是信賴憑證者原則,例如SignUpSignIn.xml
。
設定 SAML 識別提供者
設定原則之後,您必須使用 Azure AD B2C SAML 中繼資料來設定 SAML 識別提供者。 SAML 中繼資料是 SAML 通訊協定中用來公開原則 設定服務提供者 的資訊。 它會定義服務的位置,例如登入和登出、憑證、登入方法等等。
每個 SAML 識別提供者都有設定服務提供者的不同步驟。 某些 SAML 識別提供者會要求 Azure AD B2C 中繼資料,而其他提供者則要求您手動流覽中繼資料檔案,並提供資訊。 如需指引,請參閱識別提供者的檔。
下列範例顯示 Azure AD B2C 技術設定檔之 SAML 中繼資料的 URL 位址:
https://<your-tenant-name>.b2clogin.com/<your-tenant-name>.onmicrosoft.com/<your-policy>/samlp/metadata?idptp=<your-technical-profile>
使用 自訂網域 時,請使用下列格式:
https://your-domain-name/<your-tenant-name>.onmicrosoft.com/<your-policy>/samlp/metadata?idptp=<your-technical-profile>
取代下列值:
- 您的租使用者名稱 與租使用者名稱,例如 your-tenant.onmicrosoft.com。
- 具有自訂功能變數名稱的 your-domain-name ,例如 login.contoso.com。
- 具有原則名稱的 your-policy 。 例如,B2C_1A_signup_signin_adfs。
- your-technical-profile ,其名稱為 SAML 識別提供者技術設定檔。 例如,Contoso-SAML2。
開啟瀏覽器並流覽至 URL。 請確定您輸入正確的 URL,而且您可以存取 XML 中繼資料檔案。
測試您的自訂原則
- 登入 Azure 入口網站。
- 如果您有多個租使用者的存取權,請選取 頂端功能表中的 [設定 ] 圖示,從 [目錄 + 訂 用帳戶] 功能表切換至您的 Azure AD B2C 租使用者。
- 在 Azure 入口網站中,搜尋並選取 [Azure AD B2C]。
- 在 [原則] 底下 ,選取 [ 身分識別體驗架構]
- 選取您的信賴憑證者原則,例如
B2C_1A_signup_signin
。 - 針對 [ 應用程式 ],選取您 先前註冊的 Web 應用程式。 回復 URL 應該會顯示
https://jwt.ms
。 - 選取 [ 立即 執行] 按鈕。
- 從 [註冊或登入] 頁面中,選取 [Contoso] 以使用 Contoso 帳戶登入。
如果登入程式成功,您的瀏覽器會重新導向至 https://jwt.ms
,以顯示 Azure AD B2C 所傳回權杖的內容。