你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
重要
自 2025 年 5 月 1 日起,Azure AD B2C 将不再可供新客户购买。 在我们的常见问题解答中了解详细信息。
本教程介绍如何将 Azure Active Directory B2C (Azure AD B2C) 身份验证与 传输安全性的托管密钥身份验证解决方案集成。 Transmit Security 使用强大的快速在线身份认证 (FIDO2) 生物特征识别实现可靠的全通道身份验证。 该解决方案可确保跨设备和渠道的客户顺利登录体验,同时减少欺诈、网络钓鱼和凭据重用。
方案说明
以下体系结构图演示了实现:
- 用户打开 Azure AD B2C 登录页,然后登录或注册。
- Azure AD B2C 使用 OpenID Connect (OIDC) 请求将用户重定向到传输安全性。
- 传输安全性使用无应用 FIDO2 生物识别(例如指纹)对用户进行身份验证。
- 去中心化的身份验证响应被返回给Transmit Security。
- OIDC 响应将传递到 Azure AD B2C。
- 根据验证结果,向用户授予或拒绝对应用程序的访问权限。
先决条件
若要开始,需要:
- 一份 Microsoft Entra 订阅。 如果没有帐户,请获取 免费帐户。
- 链接到 Entra 订阅的 Azure AD B2C 租户。
- Azure AD B2C 租户中已注册的 Web 应用程序。
- Transmit Security 租户。 转到 transmitsecurity.com。
- 一份 Microsoft Entra 订阅。 如果没有帐户,请获取 免费帐户。
- 链接到 Entra 订阅的 Azure AD B2C 租户。
- Azure AD B2C 租户中已注册的 Web 应用程序。
- Azure AD B2C 自定义策略。
- Transmit Security 租户。 转到 transmitsecurity.com。
步骤 1:创建传输应用
在 “应用程序”中,选择“ 添加应用程序”。
使用以下属性配置应用程序:
资产 DESCRIPTION 应用程序名称 应用程序名称 客户端名称 客户端名称 重定向 URI https://<your-B2C-tenant>.b2clogin.com/<your-B2C-tenant>.onmicrosoft.com/oauth2/authresp
在其中<your-B2C-tenant>
是你的 Azure AD B2C 租户域(或者<your-B2C-tenant>.b2clogin.com
是你的自定义域)选择 并添加。
注册后,会显示 客户端 ID 和 客户端密码 。 记录稍后要使用的值。
步骤 2:配置登录体验
在 传输管理门户中,配置用户身份验证体验:
选择 “身份验证”,然后选择“ 体验管理”。
从下拉菜单中选择应用程序。
使用以下属性配置应用程序:
资产 DESCRIPTION 用户标识符 选择“电子邮件” 主要身份验证方法 选择 Passkey 辅助身份验证方法 仅启用 WebAuthn QR 和 电子邮件 OTP 选择用户信息 删除所有默认字段 选择“保存”。
步骤 3:将 Transmit 添加为标识提供者
若要使用户能够使用 Transmit Security 登录,请将 Transmit Security 配置为新的身份提供者。 在 Azure AD B2C 中,请执行以下步骤:
以至少 B2C IEF 策略管理员身份登录到 Azure 门户 。
在门户工具栏中,选择 “目录 + 订阅”。
在 门户设置 |“目录 + 订阅 ”页,在 “目录名称 ”列表中,找到 Azure AD B2C 目录,然后选择“ 切换”。
在 Azure 服务下,选择 “Azure AD B2C ”(或选择 “更多服务 ”,并使用 “所有服务 ”搜索框搜索 Azure AD B2C)。
选择“标识提供程序”,然后选择“新建 OpenID Connect 提供程序” 。
按如下所示配置提供程序:
资产 DESCRIPTION 名称 名称,例如 Transmit Security 元数据 URL https://api.transmitsecurity.io/cis/oidc/.well-known/openid-configuration
客户端 ID Transmit 提供的客户端 ID 客户端密码 由Transmit提供的客户端密钥 范围 openid email
响应类型 代码 响应模式 form_post 显示名称 email
电子邮件 email
选择“保存”。
步骤 4:创建用户流
此时,Transmit Security 标识提供者已设置,但在任何登录页中尚不可用。 将 Transmit Security 身份提供者添加到用户流中:
- 在 Azure AD B2C 租户的 “策略”下,选择 “用户流”。
- 选择“新建用户流”。
- 选择 “注册”并登录 用户流类型,然后选择“ 创建”。
- 为用户流输入一个名称,如signupsignin。
- 在“标识提供者”下:
- 对于 “本地帐户”,请选择“ 无”。
- 对于 自定义标识提供者,请选择 Transmit Security 提供者。
- 选择“ 创建 ”以添加用户流。
步骤 5:测试用户流
- 在 Azure AD B2C 租户中,选择 “用户流”。
- 选择创建的用户流,例如 B2C_1_signupsignin。
- 选择 “运行用户流” :
- 对于 应用程序,请选择已注册的 Web 应用程序。
- 对于 回复 URL,请选择
https://jwt.ms
。
- 选择运行用户流。
- 浏览器重定向到 Transmit 的登录页面。
- 完成登录流:输入帐户电子邮件并使用生物识别进行身份验证(例如指纹)。
- 浏览器使用 Azure AD B2C 令牌重定向到
https://jwt.ms
。
步骤 3:创建策略密钥
您需要存储之前在您的 Azure AD B2C 租户中记录的 Transmit 应用程序的客户端密钥。
登录到 Azure 门户。
在门户工具栏中,选择 “目录 + 订阅”。
在 门户设置 |“目录 + 订阅 ”页,在 “目录名称 ”列表中,找到 Azure AD B2C 目录,然后选择“ 切换”。
在“概述”页上的“ 策略”下,选择“ 标识体验框架”。
选择“策略密钥”,然后选择“添加”。
按如下所示配置策略密钥:
资产 DESCRIPTION 选项 手动 名称 策略密钥名称,例如 TransmitClientSecret 机密 由Transmit提供的客户端密钥 密钥用法 签名 选择“ 创建 ”以添加策略密钥。
步骤 4:将 Transmit 添加为标识提供者
若要启用 Transmit Security 登录,请将传 Transmit Security 定义为 Azure AD B2C 通过终结点与之通信的声明提供程序。 终结点提供 Azure AD B2C 使用的声明,用于验证用户在设备上使用数字标识进行身份验证。
可以通过将 Transmit Security 添加到策略扩展文件中的 ClaimsProviders 元素中,将其定义为声明提供程序。
从 GitHub 获取自定义策略初学者包,然后使用 Azure AD B2C 租户名称更新 SocialAndLocalAccounts 初学者包中的 XML 文件:
下载 .zip 文件 或克隆存储库:
git clone https://github.com/Azure-Samples/active-directory-b2c-custom-policy-starterpack
在 LocalAccounts 目录中的文件中,将字符串
yourtenant
替换为 Azure AD B2C 租户名称。
打开
LocalAccounts/ TrustFrameworkExtensions.xml
。找到 ClaimsProviders 元素。 如果未显示,请在根元素下添加它。
添加类似于以下示例的新 ClaimsProvider :
<ClaimsProvider> <Domain>api.transmitsecurity.io</Domain> <DisplayName>Transmit</DisplayName> <TechnicalProfiles> <TechnicalProfile Id="TS-OpenIdConnect"> <DisplayName>Transmit</DisplayName> <Protocol Name="OpenIdConnect" /> <Metadata> <Item Key="METADATA">https://api.transmitsecurity.io/cis/oidc/.well-known/openid-configuration</Item> <!-- Update the Client ID below to the Transmit Security client ID --> <Item Key="client_id">00001111-aaaa-2222-bbbb-3333cccc4444</Item> <Item Key="response_types">code</Item> <Item Key="scope">openid email</Item> <Item Key="response_mode">form_post</Item> <Item Key="HttpBinding">POST</Item> <Item Key="UsePolicyInRedirectUri">false</Item> <Item Key="AccessTokenResponseFormat">json</Item> </Metadata> <CryptographicKeys> <Key Id="client_secret" StorageReferenceId="B2C_1A_TransmitClientSecret" /> </CryptographicKeys> <OutputClaims> <OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="sub" /> <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="email" /> <OutputClaim ClaimTypeReferenceId="identityProvider" PartnerClaimType="iss" /> <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" AlwaysUseDefaultValue="true" /> </OutputClaims> <OutputClaimsTransformations> <OutputClaimsTransformation ReferenceId="CreateRandomUPNUserName" /> <OutputClaimsTransformation ReferenceId="CreateUserPrincipalName" /> <OutputClaimsTransformation ReferenceId="CreateAlternativeSecurityId" /> </OutputClaimsTransformations> <UseTechnicalProfileForSessionManagement ReferenceId="SM-SocialLogin" /> </TechnicalProfile> </TechnicalProfiles> </ClaimsProvider>
使用 Transmit Security 客户端 ID 设置 client_id。
使用创建的策略密钥的名称更新 client_secret 部分(例如 ,B2C_1A_TransmitClientSecret):
<Key Id="client_secret" StorageReferenceId="B2C_1A_TransmitClientSecret" />
选择“保存”。
步骤 5:添加用户流程
此时,标识提供者已设置,但在任何登录页中尚不可用。 如果你有自定义用户旅程,请继续执行“将 Transmit 添加到用户旅程”步骤。 否则,请创建重复的模板用户旅程:
- 在入门包中,打开
LocalAccounts/ TrustFrameworkBase.xml
文件。 - 查找并复制包含的
Id=SignUpOrSignIn
元素的内容。 - 打开
LocalAccounts/ TrustFrameworkExtensions.xml
。 - 查找 UserJourneys 元素。 如果没有元素,请添加一个。
- 将 UserJourney 元素粘贴为 UserJourneys 元素的子元素。
- 重命名用户旅程 ID (例如
Id=TransmitSUSI
)
步骤 6:将 Transmit 添加到用户旅程
将新的身份提供者添加到用户旅程中:
- 在用户旅程中,查找包含
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="TSIDExchange" />
</ClaimsProviderSelections>
...
</OrchestrationStep>
<OrchestrationStep Order="2" Type="ClaimsExchange">
...
<ClaimsExchanges>
<ClaimsExchange Id="TSIDExchange" TechnicalProfileReferenceId="TS-OpenIdConnect" />
</ClaimsExchanges>
</OrchestrationStep>
步骤 7:配置信赖方策略
信赖方策略(例如 SignUpSignIn.xml)指定 Azure AD B2C 执行的用户旅程。 在信赖方内查找 DefaultUserJourney 元素。 更新 ReferenceId,使其与已在其中添加标识提供者的用户旅程 ID 匹配。
在以下示例中,对于 TransmitSUSI
用户旅程,将 ReferenceId 设置为 TransmitSUSI
:
<RelyingParty>
<DefaultUserJourney ReferenceId="TransmitSUSI" />
<TechnicalProfile Id="TS-OpenIdConnect">
<DisplayName>PolicyProfile</DisplayName>
<Protocol Name="OpenIdConnect" />
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="displayName" />
<OutputClaim ClaimTypeReferenceId="givenName" />
<OutputClaim ClaimTypeReferenceId="surname" />
<OutputClaim ClaimTypeReferenceId="email" />
<OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub"/>
<OutputClaim ClaimTypeReferenceId="identityProvider" />
<OutputClaim ClaimTypeReferenceId="tenantId" AlwaysUseDefaultValue="true" DefaultValue="{Policy:TenantObjectId}" />
</OutputClaims>
<SubjectNamingInfo ClaimType="sub" />
</TechnicalProfile>
</RelyingParty>
步骤 8:上传自定义策略
使用您的 Azure AD B2C 租户关联的目录上传自定义策略。
- 登录到 Azure 门户。
- 在门户工具栏中,选择 “目录 + 订阅”。
- 在 门户设置 |“目录 + 订阅 ”页,在 “目录名称 ”列表中,找到 Azure AD B2C 目录,然后选择“ 切换”。
- 在“策略”下,选择“Identity Experience Framework”。
- 选择“ 上传自定义策略”,然后按以下顺序上传更新的文件:
- 基本策略,例如
TrustFrameworkBase.xml
- 本地化策略,例如
TrustFrameworkLocalization.xml
- 扩展策略,例如
TrustFrameworkExtensions.xml
- 信赖方策略,例如
SignUpOrSignIn.xml
步骤 9:测试自定义策略
将目录与 Azure AD B2C 租户配合使用,测试自定义策略:
- 在 Azure AD B2C 租户中,在 “策略”下,选择“ 标识体验框架”。
- 在 “自定义策略”下,选择 B2C_1A_signup_signin。
- 对于 应用程序,请选择已注册的 Web 应用程序。
回复 URL 为
https://jwt.ms
. - 选择“立即运行”。
- 浏览器重定向到 Transmit 的登录页面。
- 完成登录流:输入帐户电子邮件并使用生物识别进行身份验证(例如指纹)。
- 浏览器使用 Azure AD B2C 令牌重定向到
https://jwt.ms
。
后续步骤
有关其他信息,请查看以下文章: