你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
为 Azure Active Directory B2C 配置传输安全性以实现无密码身份验证
在本教程中,了解如何将 Azure Active Directory B2C (Azure AD B2C)身份验证与 传输安全性 BindID - 无密码身份验证解决方案集成。 BindID 使用快速在线身份认证(FIDO2)生物特征识别以实现可靠的全通道身份验证。 该解决方案确保客户能够在设备和通道上获得顺畅的登录体验,并减少欺诈、网络钓鱼和凭据重复使用问题。
方案描述
以下体系结构图演示了实现方式。
- 用户打开 Azure AD B2C 登录页面,然后登录或注册。
- Azure AD B2C 使用 OpenID Connect (OIDC) 请求将用户重定向到 BindID。
- BindID 使用无应用 FIDO2 生物识别特征(例如指纹)对用户进行身份验证。
- 将分散的身份验证响应返回到 BindID。
- OIDC 响应传递给 Azure AD B2C。
- 根据验证结果允许或拒绝用户访问应用程序。
先决条件
要开始,需要:
- 一个 Microsoft Entra 订阅
- 如果没有,获取一个 Azure 免费帐户
- 一个关联到 Azure 订阅的 Azure AD B2C 租户
- BindID 租户
- 转到 transmitsecurity.com 以 开始
- 在 Azure 门户中注册 Web 应用程序
- Azure AD B2C 自定义策略
- 如果无法使用策略,请参阅 教程:在 Azure AD B2C 中创建用户流和自定义策略
在 BindID 中注册应用
开始操作:
- 转到 developer.bindid.io 以 配置应用程序。
- 在 BindID 管理员 门户 中添加应用程序。 需要登录。
属性 | 说明 |
---|---|
名称 | 应用程序名称 |
域 | 输入 your-B2C-tenant-name.onmicrosoft.com 。 将 your-B2C-tenant 替换为 Azure AD B2C 租户。 |
重定向 URI | https://jwt.ms/ |
重定向 URL | 输入 https://your-B2C-tenant-name.b2clogin.com/your-B2C-tenant-name.onmicrosoft.com/oauth2/authresp 。 将 your-B2C-tenant 替换为 Azure AD B2C 租户。 对于自定义域,请将 your-B2C-tenant-name.b2clogin.com 替换为自定义域。 |
- 注册后,会显示“客户端 ID”和“客户端密码”。
- 记录这些值以供稍后使用。
将 BindID 配置为 Azure AD B2C 中的标识提供者
对于以下说明,请使用包含你的 Azure AD B2C 租户的目录。
- 以全局管理员身份登录到 Azure 门户。
- 在门户工具栏中,选择“目录 + 订阅”。
- 在“门户设置”|“目录 + 订阅”页面的“目录名称”列表中,找到 Azure AD B2C 目录。
- 选择“切换”。
- 在 Azure 门户左上角,选择“所有服务”。
- 搜索并选择“Azure AD B2C”。
- 选择“标识提供者”。
- 选择“新的 OpenID Connect 提供程序”。
- 输入“名称”。
- 对于“元数据 URL”,请输入
https://signin.bindid-sandbox.io/.well-known/openid-configuration
。 - 对于“客户端 ID”,输入记录的客户端 ID。
- 对于“客户端密码”,输入记录的客户端密码。
- 对于“范围”,请输入
openid email
。 - 对于“响应类型”,请选择“代码”。
- 对于“响应模式”,请选择“form_post”。
- 在“标识提供者声明映射”下,对于“用户 ID”,选择
sub
。 - 对于“电子邮件”,选择
email
。 - 选择“保存”。
创建用户流
- 在 Azure AD B2C 租户中的“策略”下,选择“用户流”。
- 选择“新建用户流”。
- 选择“注册和登录”用户流类型。
- 选择“创建” 。
- 输入“名称”。
- 在“标识提供者”下,对于“本地帐户”,选择“无”。 此操作将禁用基于电子邮件和密码的身份验证。
- 对于“自定义标识提供者”,选择创建的 BindID 标识提供程序(例如“使用 BindID 登录”)。
- 选择“创建” 。
测试用户流
- 在 Azure AD B2C 租户中,选择“用户流”。
- 选择创建的用户流(例如“B2C_1_signupsignin”)。
- 对于“应用程序”,请选择注册的 Web 应用程序。
回复 URL 为
https://jwt.ms
。 - 选择“运行用户流”。
- 浏览器会重定向到 BindID 登录页面。
- 输入注册的帐户电子邮件。
- 使用无应用 FIDO2 生物特征(例如指纹)对用户进行身份验证。
- 浏览器会重定向到
https://jwt.ms
。 对于 Azure AD B2C 返回的令牌,会显示相关内容。
创建 BindID 策略密钥
将 BindID 应用程序的客户端机密添加为策略密钥。 对于以下说明,请使用包含你的 Azure AD B2C 租户的目录。
- 登录 Azure 门户。
- 在门户工具栏中,选择“目录 + 订阅”。
- 在“门户设置 | 目录 + 订阅”页面的“目录名称”列表中,找到 Azure AD B2C 目录。
- 选择“切换”。
- 在概述页面上的“策略”下,选择“Identity Experience Framework”。
- 选择“策略密钥”。
- 选择 添加 。
- 对于“选项”,请选择“手动” 。
- 输入“名称”。 前缀
B2C_1A_
追加到密钥名称。 - 在“密码”中,输入记录的客户端密码。
- 对于“密钥用法”,请选择“签名” 。
- 选择“创建”。
将 BindID 配置为标识提供者
要使用户能够使用 BindID 登录,请将 BindID 定义为 Azure AD B2C 可通过终结点与其通信的声明提供程序。 该终结点提供 Azure AD B2C 用于在其设备上验证使用数字身份进行身份验证的用户的声明。
将 BindID 添加为声明提供程序。 要开始使用,请从 GitHub 获取自定义策略新手包,然后使用 Azure AD B2C 租户名称更新 SocialAndLocalAccounts 新手包中的 XML 文件:
打开 zip 文件夹 active-directory-b2c-custom-policy-starterpack-main.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>signin.bindid-sandbox.io</Domain> <DisplayName>BindID</DisplayName> <TechnicalProfiles> <TechnicalProfile Id="BindID-OpenIdConnect"> <DisplayName>BindID</DisplayName> <Protocol Name="OpenIdConnect" /> <Metadata> <Item Key="METADATA">https://signin.bindid-sandbox.io/.well-known/openid-configuration</Item> <!-- Update the Client ID below to the BindID Application ID --> <Item Key="client_id">00000000-0000-0000-0000-000000000000</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_BindIDClientSecret" /> </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>
将 client_id 设置为记录的 BindID 应用程序 ID。
选择“保存”。
添加用户旅程
标识提供者不在登录页面上。 如果有自定义用户旅程,请继续 将标识提供者添加到用户旅程,否则,请创建重复的模板用户旅程:
- 在入门包中,打开
LocalAccounts/ TrustFrameworkBase.xml
文件。 - 找到并复制包含
Id=SignUpOrSignIn
的 UserJourney 元素的内容。 - 打开
LocalAccounts/ TrustFrameworkExtensions.xml
。 - 找到 UserJourneys 元素。 如果没有此元素,请添加一个。
- 将 UserJourney 元素粘贴为 UserJourneys 元素的子项。
- 重命名用户旅程 ID。
将标识提供者添加到用户旅程
将新的标识提供者添加到用户旅程。
- 在用户旅程中,查找包含
Type=CombinedSignInAndSignUp
或Type=ClaimsProviderSelection
的业务流程步骤元素。 这通常是第一个业务流程步骤。 ClaimsProviderSelections 元素具有用户登录使用的标识提供者列表。 元素顺序控制登录按钮的顺序。 - 添加 ClaimsProviderSelection XML 元素。
- 将 TargetClaimsExchangeId 的值设置为易记名称。
- 添加 ClaimsExchange 元素。
- 将 ID 设为目标声明交换 ID 的值。 此操作将 BindID 按钮链接到
BindID-SignIn
。 - 将 TechnicalProfileReferenceId 值更新为创建的技术配置文件 ID。
以下 XML 演示了使用标识提供者的用户旅程业务流程。
<OrchestrationStep Order="1" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="api.signuporsignin">
<ClaimsProviderSelections>
...
<ClaimsProviderSelection TargetClaimsExchangeId="BindIDExchange" />
</ClaimsProviderSelections>
...
</OrchestrationStep>
<OrchestrationStep Order="2" Type="ClaimsExchange">
...
<ClaimsExchanges>
<ClaimsExchange Id="BindIDExchange" TechnicalProfileReferenceId="BindID-OpenIdConnect" />
</ClaimsExchanges>
</OrchestrationStep>
配置信赖方策略
信赖方策略(例如 SignUpOrSignIn.xml)指定 Azure AD B2C 执行的用户旅程。 还可以调整 PolicyProfile TechnicalProfile 元素的 OutputClaims 元素,从而控制传递给应用程序的声明。 在本教程中,应用程序会接收显示名称、名字、姓氏、电子邮件、objectId、标识提供者和 tenantId 等用户属性。
请参阅 Azure-Samples/active-directory-b2c-custom-policy-starterpack
<RelyingParty>
<DefaultUserJourney ReferenceId="SignUpOrSignInWithBindID" />
<TechnicalProfile Id="BindID-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>
上传自定义策略
- 登录 Azure 门户。
- 在门户工具栏中,选择“目录 + 订阅”。
- 在“门户设置”|“目录 + 订阅”页面的“目录名称”列表中,找到 Azure AD B2C 目录。
- 选择“切换”。
- 在 Azure 门户中,搜索并选择“Azure AD B2C”。
- 在“策略”下,选择“Identity Experience Framework”。
- 选择“上传自定义策略”。
- 按以下顺序上传 LocalAccounts 初学者包中的文件:
- 基本策略,例如
TrustFrameworkBase.xml
- 本地化策略,例如
TrustFrameworkLocalization.xml
- 扩展策略,例如
TrustFrameworkExtensions.xml
- 信赖方策略,例如
SignUpOrSignIn.xml
测试自定义策略
对于以下说明,请使用包含你的 Azure AD B2C 租户的目录。
- 在 Azure AD B2C 租户的“策略”下选择“Identity Experience Framework”。
- 在“自定义策略”下,选择“B2C_1A_signup_signin” 。
- 对于“应用程序”,请选择注册的 Web 应用程序。
回复 URL 为
https://jwt.ms
。 - 选择“立即运行”。
- 浏览器会重定向到 BindID 登录页面。
- 输入注册的帐户电子邮件。
- 使用无应用 FIDO2 生物特征(例如指纹)对用户进行身份验证。
- 浏览器会重定向到
https://jwt.ms
。 会显示 Azure AD B2C 返回的令牌内容。
后续步骤
有关更多信息,请查看以下文章: