重要
自 2025 年 5 月 1 日起,Azure AD B2C 将不再可供新客户购买。 在我们的常见问题解答中了解详细信息。
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 Connect 应用程序,也可以是 SAML 服务提供商。
- 在 Azure AD B2C 登录页中,用户选择使用 SAML 标识提供者帐户(例如 Contoso)登录。 Azure AD B2C 启动 SAML 授权请求,并将用户转到 SAML 标识提供者以完成登录。
- SAML 标识提供者返回 SAML 响应。
- Azure AD B2C 验证 SAML 令牌、提取声明、颁发自己的令牌,并将用户带回应用程序。
- 完成 Active Directory B2C 中的自定义策略入门中的步骤。 本教程指导你如何更新自定义策略文件以使用 Azure AD B2C 租户配置。
- 如果尚未注册 Web 应用,请使用注册 Web 应用程序中的步骤注册一个。
此方案需要以下组件:
- 一个 SAML 标识提供者 ,能够接收、解码和响应来自 Azure AD B2C 的 SAML 请求。
- 标识提供者公开可用的 SAML 元数据终结点。
- Azure AD B2C 租户。
若要在 Azure AD B2C 和 SAML 标识提供者之间建立信任,需要提供有效的 X509 证书和私钥。 Azure AD B2C 使用证书的私钥对 SAML 请求进行签名。 标识提供者使用证书的公钥验证请求。 公钥可通过技术配置文件元数据进行访问。 或者,可以手动将.cer文件上传到 SAML 标识提供者。
大多数情况下都可以接受自签名证书。 对于生产环境,建议使用证书颁发机构颁发的 X509 证书。 此外,如本文档后面所述,对于非生产环境,可以在两端禁用 SAML 签名。
如果你还没有证书,则可以使用自签名证书。 自签名证书是未由证书颁发机构 (CA) 签署的安全证书,不提供由 CA 签名的证书的安全保障。
在 Windows 上,可在 PowerShell 中使用 New-SelfSignedCertificate cmdlet 来生成证书。
运行以下 PowerShell 命令来生成自签名证书。 根据应用程序和 Azure AD B2C 租户名称修改
-Subject
参数,如contosowebapp.contoso.partner.onmschina.cn
。 还可调整-NotAfter
日期,为证书指定不同的过期日期。New-SelfSignedCertificate ` -KeyExportPolicy Exportable ` -Subject "CN=yourappname.yourtenant.partner.onmschina.cn" ` -KeyAlgorithm RSA ` -KeyLength 2048 ` -KeyUsage DigitalSignature ` -NotAfter (Get-Date).AddMonths(12) ` -CertStoreLocation "Cert:\CurrentUser\My"
在 Windows 计算机上,搜索并选择“管理用户证书”
在“证书 - 当前用户”下,选择个人>证书>yourappname.yourtenant.partner.onmschina.cn。
选择该证书,然后依次选择“操作”“所有任务”>“导出”。
选择“下一步”“是,导出私钥”>“下一步” 。
接受“导出文件格式”的默认值,然后选择“下一步” 。
启用“密码”选项,输入证书的密码,然后选择“下一步” 。
若要指定保存证书的位置,请选择“浏览”并导航到所选的目录。
在“另存为”窗口中,输入文件名,然后选择“保存” 。
选择“下一步”>“完成”。
要让 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 标识提供者添加到 ClaimsProviders 元素来定义该标识提供者。 声明提供程序包含用于确定与 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 元素 | 价值 |
---|---|
声明提供者\Domain | 用于 直接登录的域名。 输入要在直接登录中使用的域名。 例如, Contoso.com。 |
技术配置文件\显示名称 | 此值将显示在登录屏幕上的登录按钮上。 例如, 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 声明。 - 没有名称映射的 "email" 声明。
技术配置文件还会返回标识提供者不返回的声明:
- 包含标识提供者名称的 identityProvider 声明。
- authenticationSource 声明的默认值为 socialIdpAuthentication。
如果您还没有 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"
元素的完整内容。 - 打开 TrustFrameworkExtensions.xml 并找到 UserJourneys 元素。 如果该元素不存在,请添加一个。
- 将您复制的 UserJourney 元素的完整内容粘贴到 UserJourneys 元素下作为其子项。
- 对用户旅程的 ID 进行重命名。 例如,
Id="CustomSignUpSignIn"
。
现在你已拥有用户旅程,请将新的身份提供者添加到用户旅程中。 首先添加一个“登录”按钮,然后将该按钮链接到某个操作。 该操作是前面创建的技术配置文件。
在用户旅程中,查找包含
Type="CombinedSignInAndSignUp"
或Type="ClaimsProviderSelection"
的业务流程步骤元素。 通常这是第一个编排步骤。 ClaimsProviderSelections 元素包含用户可以用来登录的标识提供者列表。 元素的顺序将决定向用户显示的登录按钮的顺序。 添加ClaimsProviderSelection XML 元素。 将 TargetClaimsExchangeId 的值设置为易记名称。在下一个编排步骤中,添加 ClaimsExchange 元素。 将 ID 设为目标声明交换 ID 的值。将 TechnicalProfileReferenceId 的值更新为先前创建的技术配置文件的 ID。
下面的 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,使其与已在其中添加标识提供者的用户旅程 ID 匹配。
在以下示例中,对于 CustomSignUpSignIn
用户旅程,将 ReferenceId 设置为 CustomSignUpSignIn
:
<RelyingParty>
<DefaultUserJourney ReferenceId="CustomSignUpSignIn" />
...
</RelyingParty>
- 登录到 Azure 门户。
- 在门户工具栏中选择“目录 + 订阅”图标,然后选择包含 Azure AD B2C 租户的目录。
- 在 Azure 门户中,搜索并选择 Azure AD B2C。
- 在“策略”下,选择“Identity Experience Framework”。
- 选择“上传自定义策略”,然后上传已更改的两个策略文件,其顺序为:先上传扩展策略(例如 ),然后上传信赖方策略(例如
TrustFrameworkExtensions.xml
)。
配置策略后,需要使用 Azure AD B2C SAML 元数据配置 SAML 标识提供者。 SAML 元数据是 SAML 协议中用于公开策略(例如服务提供商)的配置的信息。 它定义服务的位置,例如登录和注销、证书、登录方法等。
每个 SAML 标识提供者都有不同的设置服务提供商的步骤。 某些 SAML 标识提供者要求使用 Azure AD B2C 元数据,而另一些则要求手动浏览元数据文件并提供信息。 请参考您的身份提供商的文档以获取指导。
以下示例显示了 Azure AD B2C 技术配置文件的 SAML 元数据的 URL 地址:
https://<your-tenant-name>.b2clogin.cn/<your-tenant-name>.partner.onmschina.cn/<your-policy>/samlp/metadata?idptp=<your-technical-profile>
请替换以下值:
- 将your-tenant-name替换为您的租户名称,例如 your-tenant.partner.onmschina.cn。
- 请用您的自定义域名替换 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”应显示为 。
- 选择“立即运行”按钮。
- 在注册或登录页中,选择 Contoso 以使用 Contoso 帐户登录。
如果登录过程成功,浏览器将重定向到 https://jwt.ms
,后者显示 Azure AD B2C 返回的令牌内容。