重要
自 2025 年 5 月 1 日起,Azure AD B2C 将不再可供新客户购买。 在我们的常见问题解答中了解详细信息。
开始之前,请使用此页顶部的“选择策略类型”选择器来选择要设置的策略类型。 Azure Active Directory B2C 提供了两种定义用户如何与应用程序交互的方法:通过预定义的用户流,或者通过可完全配置的自定义策略。 对于每种方法,本文中所需的步骤都不同。
注释
在 Azure Active Directory B2C 中,自定义策略 主要用于解决复杂场景。 对于大多数场景,我们建议您使用内置的用户流。 如果未这样做,请通过 Active Directory B2C 中的自定义策略入门来了解自定义策略初学者包。
先决条件
- 创建用户流,以便用户能够注册并登录应用程序。
- 注册 Web 应用程序。
- 完成 Active Directory B2C 中的自定义策略入门中的步骤。 本教程指导你如何更新自定义策略文件以使用 Azure AD B2C 租户配置。
- 注册 Web 应用程序。
创建 Apple ID 应用程序
若要在 Azure Active Directory B2C(Azure AD B2C)中为具有 Apple ID 的用户启用登录,需要在其中 https://developer.apple.com创建应用程序。 有关详细信息,请参阅 使用 Apple 登录。 如果还没有 Apple 开发人员帐户,可以在 Apple 开发人员计划中注册。
- 使用帐户凭据登录到 Apple 开发人员门户 。
- 从菜单中选择 证书、ID、& 配置文件,然后选择 (+)。
- 对于 “注册新标识符”,请选择 “应用 ID”,然后选择“ 继续”。
- 对于 “选择类型”,请选择 “应用”,然后选择“ 继续”。
- 对于“注册应用 ID”:
- 输入说明
- 输入 Bundle ID,例如
com.contoso.azure-ad-b2c
。 - 对于 功能,请从功能列表中选择 “使用 Apple 登录 ”。
- 请在这一步骤中记下你的团队 ID(应用 ID 前缀)。 稍后需要用到它。
- 选择 继续,然后 注册。
- 从菜单中选择 证书、ID、& 配置文件,然后选择 (+)。
- 对于 “注册新标识符”,请选择 “服务 ID”,然后选择“ 继续”。
- 对于“注册服务 ID”:
- 输入说明。 同意屏幕上向用户显示说明。
- 输入 标识符,例如
com.consoto.azure-ad-b2c-service
。 请记下您的 服务 ID 标识。 标识符是 OpenID Connect 流的 客户端 ID 。 - 选择 继续,然后选择 注册。
- 在 “标识符”中,选择创建的标识符。
- 选择“通过 Apple 登录”,然后选择“配置”。
- 选择配置“通过 Apple 登录”所用的“主应用 ID”。
- 在 域和子域中,输入
your-tenant-name.b2clogin.cn
。 将 your-tenant-name 替换为租户的名称。 - 在 返回 URL 中,输入
https://your-tenant-name.b2clogin.cn/your-tenant-name.partner.onmschina.cn/oauth2/authresp
。 将your-tenant-name
替换为租户的名称。 返回 URL 必须全部为小写。 - 选择“下一步”,然后选择“完成”。
- 当弹出窗口关闭时,选择 “继续”,然后选择 “保存”。
创建 Apple 客户端机密
- 在 Apple 开发人员门户菜单中,选择 密钥,然后选择 (+)。
- 对于“注册新密钥”:
- 键入“密钥名称”。
- 选择“使用 Apple登录”,然后选择“配置”。
- 对于 主应用 ID,请选择之前创建的应用,然后选择“ 保存”。
- 选择“ 配置”,然后选择“ 注册 ”以完成密钥注册过程。 记下密钥 ID。 配置用户流时需要此密钥。
- 对于 “下载密钥”,请选择“ 下载 ”以下载包含密钥的 .p8 文件。
签署客户端密码
使用之前下载的 .p8 文件将客户端密码签名到 JWT。 可使用许多库来创建 JWT 并对其进行签名。 使用能为你生成令牌的 Azure 函数。
创建 Azure 函数。
在 “开发人员”下,选择 “代码 + 测试”。
复制 run.csx 文件的内容,并将其粘贴到编辑器中。
选择“保存”。
发出 HTTP
POST
请求,并提供以下信息:- appleTeamId:你的 Apple 开发人员团队 ID
- appleServiceId:Apple 服务 ID(客户端 ID)
- appleKeyId:JWT 标头中存储的 10 位密钥 ID(Apple 需要)
-
p8key:PEM 格式键。 可以通过在文本编辑器中打开 .p8 文件,并复制
-----BEGIN PRIVATE KEY-----
和-----END PRIVATE KEY-----
之间的所有内容(不包括换行符)来获取此内容。
以下 json 是对 Azure 函数的调用示例:
{
"appleTeamId": "ABC123DEFG",
"appleServiceId": "com.yourcompany.app1",
"appleKeyId": "URKEYID001",
"p8key": "MIGTAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBHkwdwIBAQQg+s07NiAcuGEu8rxsJBG7ttupF6FRe3bXdHxEipuyK82gCgYIKoZIzj0DAQehRANCAAQnR1W/KbbaihTQayXH3tuAXA8Aei7u7Ij5OdRy6clOgBeRBPy1miObKYVx3ki1msjjG2uGqRbrc1LvjLHINWRD"
}
Azure 函数在响应中使用格式正确且签名的客户端机密 JWT 进行响应,例如:
{
"token": "eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjb20ueW91cmNvbXBhbnkuYXBwMSIsIm5iZiI6MTU2MDI2OTY3NSwiZXhwIjoxNTYwMzU2MDc1LCJpc3MiOiJBQkMxMjNERUZHIiwiYXVkIjoiaHR0cHM6Ly9hcHBsZWlkLmFwcGxlLmNvbSJ9.Dt9qA9NmJ_mk6tOqbsuTmfBrQLFqc9BnSVKR6A-bf9TcTft2XmhWaVODr7Q9w1PP3QOYShFXAnNql5OdNebB4g"
}
创建策略密钥
需要存储以前在 Azure AD B2C 租户中记录的客户端密码。
- 登录到 Azure 门户。
- 如果有权访问多个租户,请选择顶部菜单中的“设置”图标,切换到“目录 + 订阅”菜单中的 Azure AD B2C 租户。
- 在“Azure 服务”下,选择“Azure AD B2C”。 或者,使用搜索框查找并选择“Azure AD B2C”。
- 在“概述”页上,选择“Identity Experience Framework”。
- 选择“策略密钥”,然后选择“添加”。
- 对于“选项”,选择“手动”。
- 输入策略密钥的名称。 例如,“AppleSecret”。 前缀“B2C_1A_”会自动添加到密钥名称中。
- 在 机密中,输入 Azure 函数(JWT)返回的令牌的值。
- 对于“密钥用法”,请选择“签名”。
- 选择 创建。
重要
- 使用 Apple 登录需要管理员每隔 6 个月续订其客户端密码。
- 如果 Apple 客户端密码过期并将新值存储在策略密钥中,则需要手动续订它。
- 建议在 6 个月内设置自己的提醒,以生成新的客户端密码。
- 遵循指南,了解如何提供“使用 Apple ID 登录”按钮。
将 Apple 配置为标识提供者
若要允许用户使用 Apple ID 登录,需将该帐户定义为 Azure AD B2C 可通过终结点与其进行通信的声明提供程序。 该终结点提供一组声明,Azure AD B2C 使用这些声明来验证特定用户是否已进行身份验证。
可以将 Apple ID 定义为声明提供程序,方法是将其添加到策略扩展文件中的 ClaimsProviders 元素。
打开 TrustFrameworkExtensions.xml。
找到 ClaimsProviders 元素。 如果该元素不存在,请在根元素下添加它。
添加一个新的 ClaimsProvider,如下所示:
<ClaimsProvider> <Domain>apple.com</Domain> <DisplayName>Apple</DisplayName> <TechnicalProfiles> <TechnicalProfile Id="Apple-OIDC"> <DisplayName>Sign in with Apple</DisplayName> <Protocol Name="OpenIdConnect" /> <Metadata> <Item Key="ProviderName">apple</Item> <Item Key="authorization_endpoint">https://appleid.apple.com/auth/authorize</Item> <Item Key="AccessTokenEndpoint">https://appleid.apple.com/auth/token</Item> <Item Key="JWKS">https://appleid.apple.com/auth/keys</Item> <Item Key="issuer">https://appleid.apple.com</Item> <Item Key="scope">name email openid</Item> <Item Key="HttpBinding">POST</Item> <Item Key="response_types">code</Item> <Item Key="external_user_identity_claim_id">sub</Item> <Item Key="response_mode">form_post</Item> <Item Key="ReadBodyClaimsOnIdpRedirect">user.name.firstName user.name.lastName user.email</Item> <Item Key="client_id">You Apple ID</Item> <Item Key="UsePolicyInRedirectUri">false</Item> </Metadata> <CryptographicKeys> <Key Id="client_secret" StorageReferenceId="B2C_1A_AppleSecret"/> </CryptographicKeys> <OutputClaims> <OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="sub" /> <OutputClaim ClaimTypeReferenceId="identityProvider" DefaultValue="https://appleid.apple.com" AlwaysUseDefaultValue="true" /> <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" AlwaysUseDefaultValue="true" /> <OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="user.name.firstName"/> <OutputClaim ClaimTypeReferenceId="surname" PartnerClaimType="user.name.lastName"/> <OutputClaim ClaimTypeReferenceId="email" /> </OutputClaims> <OutputClaimsTransformations> <OutputClaimsTransformation ReferenceId="CreateRandomUPNUserName"/> <OutputClaimsTransformation ReferenceId="CreateUserPrincipalName"/> <OutputClaimsTransformation ReferenceId="CreateAlternativeSecurityId"/> <OutputClaimsTransformation ReferenceId="CreateSubjectClaimFromAlternativeSecurityId"/> </OutputClaimsTransformations> <UseTechnicalProfileForSessionManagement ReferenceId="SM-SocialLogin" /> </TechnicalProfile> </TechnicalProfiles> </ClaimsProvider>
将 client_id 设置为服务标识符。 例如,
com.consoto.azure-ad-b2c-service
。保存文件。
添加用户旅程
此时,标识提供者已设置,但还不能在任何登录页中使用。 如果你没有自己的自定义用户旅程,请创建现有模板用户旅程的副本,否则,请继续执行下一步。
- 打开初学者包中的 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="AppleExchange" />
</ClaimsProviderSelections>
...
</OrchestrationStep>
<OrchestrationStep Order="2" Type="ClaimsExchange">
...
<ClaimsExchanges>
<ClaimsExchange Id="AppleExchange" TechnicalProfileReferenceId="Apple-OIDC" />
</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
)。
测试自定义策略
- 选择依赖方策略,例如
B2C_1A_signup_signin
。 - 对于应用程序,请选择您前面注册的 Web 应用程序。 “回复 URL”应显示为
https://jwt.ms
。 - 选择“立即运行”按钮。
- 在注册或登录页中,选择 Apple 以使用 Apple ID 登录。
如果登录过程成功,浏览器将重定向到 https://jwt.ms
,后者显示 Azure AD B2C 返回的令牌内容。
自定义用户界面
遵循指南,了解如何提供“使用 Apple ID 登录”。 Apple 提供了多个 使用 Apple 按钮登录 ,你可以使用这些按钮让用户设置帐户并登录。 如有必要,请创建用于 Apple 登录的自定义按钮。 了解如何 显示“使用 Apple 登录”按钮。
若要符合 Apple 用户界面准则,请执行以下作:
- 使用 HTML 模板自定义用户界面
- 本地化标识提供者的名称。