你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

为 Azure Active Directory B2C 配置传输安全性以实现无密码身份验证

在本教程中,了解如何将 Azure Active Directory B2C (Azure AD B2C)身份验证与 传输安全性 BindID - 无密码身份验证解决方案集成。 BindID 使用快速在线身份认证(FIDO2)生物特征识别以实现可靠的全通道身份验证。 该解决方案确保客户能够在设备和通道上获得顺畅的登录体验,并减少欺诈、网络钓鱼和凭据重复使用问题。

方案描述

以下体系结构图演示了实现方式。

显示 BindID 和 Azure AD B2C 体系结构的关系图。

  1. 用户打开 Azure AD B2C 登录页面,然后登录或注册。
  2. Azure AD B2C 使用 OpenID Connect (OIDC) 请求将用户重定向到 BindID。
  3. BindID 使用无应用 FIDO2 生物识别特征(例如指纹)对用户进行身份验证。
  4. 将分散的身份验证响应返回到 BindID。
  5. OIDC 响应传递给 Azure AD B2C。
  6. 根据验证结果允许或拒绝用户访问应用程序。

先决条件

要开始,需要:

在 BindID 中注册应用

开始操作:

  1. 转到 developer.bindid.io 以 配置应用程序
  2. 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 替换为自定义域。
  1. 注册后,会显示“客户端 ID”和“客户端密码”。
  2. 记录这些值以供稍后使用。

将 BindID 配置为 Azure AD B2C 中的标识提供者

对于以下说明,请使用包含你的 Azure AD B2C 租户的目录。

  1. 以全局管理员身份登录到 Azure 门户
  2. 在门户工具栏中,选择“目录 + 订阅”。
  3. 在“门户设置”|“目录 + 订阅”页面的“目录名称”列表中,找到 Azure AD B2C 目录。
  4. 选择“切换”。
  5. 在 Azure 门户左上角,选择“所有服务”。
  6. 搜索并选择“Azure AD B2C”。
  7. 选择“标识提供者”。
  8. 选择“新的 OpenID Connect 提供程序”。
  9. 输入“名称”。
  10. 对于“元数据 URL”,请输入 https://signin.bindid-sandbox.io/.well-known/openid-configuration
  11. 对于“客户端 ID”,输入记录的客户端 ID。
  12. 对于“客户端密码”,输入记录的客户端密码。
  13. 对于“范围”,请输入 openid email
  14. 对于“响应类型”,请选择“代码”。
  15. 对于“响应模式”,请选择“form_post”。
  16. 在“标识提供者声明映射”下,对于“用户 ID”,选择 sub
  17. 对于“电子邮件”,选择 email
  18. 选择“保存”。

创建用户流

  1. 在 Azure AD B2C 租户中的“策略”下,选择“用户流”。
  2. 选择“新建用户流”。
  3. 选择“注册和登录”用户流类型。
  4. 选择“创建” 。
  5. 输入“名称”。
  6. 在“标识提供者”下,对于“本地帐户”,选择“”。 此操作将禁用基于电子邮件和密码的身份验证。
  7. 对于“自定义标识提供者”,选择创建的 BindID 标识提供程序(例如“使用 BindID 登录”)。
  8. 选择“创建” 。

测试用户流

  1. 在 Azure AD B2C 租户中,选择“用户流”。
  2. 选择创建的用户流(例如“B2C_1_signupsignin”)。
  3. 对于“应用程序”,请选择注册的 Web 应用程序。 回复 URLhttps://jwt.ms
  4. 选择“运行用户流”。
  5. 浏览器会重定向到 BindID 登录页面。
  6. 输入注册的帐户电子邮件。
  7. 使用无应用 FIDO2 生物特征(例如指纹)对用户进行身份验证。
  8. 浏览器会重定向到 https://jwt.ms。 对于 Azure AD B2C 返回的令牌,会显示相关内容。

创建 BindID 策略密钥

将 BindID 应用程序的客户端机密添加为策略密钥。 对于以下说明,请使用包含你的 Azure AD B2C 租户的目录。

  1. 登录 Azure 门户
  2. 在门户工具栏中,选择“目录 + 订阅”。
  3. 在“门户设置 | 目录 + 订阅”页面的“目录名称”列表中,找到 Azure AD B2C 目录。
  4. 选择“切换”。
  5. 在概述页面上的“策略”下,选择“Identity Experience Framework”。
  6. 选择“策略密钥”。
  7. 选择 添加
  8. 对于“选项”,请选择“手动” 。
  9. 输入“名称”。 前缀 B2C_1A_ 追加到密钥名称。
  10. 在“密码”中,输入记录的客户端密码。
  11. 对于“密钥用法”,请选择“签名” 。
  12. 选择“创建”。

将 BindID 配置为标识提供者

要使用户能够使用 BindID 登录,请将 BindID 定义为 Azure AD B2C 可通过终结点与其通信的声明提供程序。 该终结点提供 Azure AD B2C 用于在其设备上验证使用数字身份进行身份验证的用户的声明。

将 BindID 添加为声明提供程序。 要开始使用,请从 GitHub 获取自定义策略新手包,然后使用 Azure AD B2C 租户名称更新 SocialAndLocalAccounts 新手包中的 XML 文件:

  1. 打开 zip 文件夹 active-directory-b2c-custom-policy-starterpack-main.zip 或者克隆存储库:

        git clone https://github.com/Azure-Samples/active-directory-b2c-custom-policy-starterpack
    
  2. LocalAccounts 目录的文件中,将字符串 yourtenant 替换为 Azure AD B2C 租户名称。

  3. 打开 LocalAccounts/ TrustFrameworkExtensions.xml

  4. 找到 ClaimsProviders 元素。 如果它不出现,请在根元素下面添加它。

  5. 新增类似于以下示例的 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>    
    
  6. client_id 设置为记录的 BindID 应用程序 ID。

  7. 选择“保存”。

添加用户旅程

标识提供者不在登录页面上。 如果有自定义用户旅程,请继续 将标识提供者添加到用户旅程,否则,请创建重复的模板用户旅程:

  1. 在入门包中,打开 LocalAccounts/ TrustFrameworkBase.xml 文件。
  2. 找到并复制包含 Id=SignUpOrSignInUserJourney 元素的内容。
  3. 打开 LocalAccounts/ TrustFrameworkExtensions.xml
  4. 找到 UserJourneys 元素。 如果没有此元素,请添加一个。
  5. 将 UserJourney 元素粘贴为 UserJourneys 元素的子项。
  6. 重命名用户旅程 ID

将标识提供者添加到用户旅程

将新的标识提供者添加到用户旅程。

  1. 在用户旅程中,查找包含 Type=CombinedSignInAndSignUpType=ClaimsProviderSelection 的业务流程步骤元素。 这通常是第一个业务流程步骤。 ClaimsProviderSelections 元素具有用户登录使用的标识提供者列表。 元素顺序控制登录按钮的顺序。
  2. 添加 ClaimsProviderSelection XML 元素。
  3. 将 TargetClaimsExchangeId 的值设置为易记名称。
  4. 添加 ClaimsExchange 元素。
  5. 将 ID 设为目标声明交换 ID 的值。 此操作将 BindID 按钮链接到 BindID-SignIn
  6. 将 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>

上传自定义策略

  1. 登录 Azure 门户
  2. 在门户工具栏中,选择“目录 + 订阅”。
  3. 在“门户设置”|“目录 + 订阅”页面的“目录名称”列表中,找到 Azure AD B2C 目录。
  4. 选择“切换”。
  5. 在 Azure 门户中,搜索并选择“Azure AD B2C”。
  6. 在“策略”下,选择“Identity Experience Framework”。
  7. 选择“上传自定义策略”。
  8. 按以下顺序上传 LocalAccounts 初学者包中的文件:
  • 基本策略,例如 TrustFrameworkBase.xml
  • 本地化策略,例如 TrustFrameworkLocalization.xml
  • 扩展策略,例如 TrustFrameworkExtensions.xml
  • 信赖方策略,例如 SignUpOrSignIn.xml

测试自定义策略

对于以下说明,请使用包含你的 Azure AD B2C 租户的目录。

  1. 在 Azure AD B2C 租户的“策略”下选择“Identity Experience Framework”。
  2. 在“自定义策略”下,选择“B2C_1A_signup_signin” 。
  3. 对于“应用程序”,请选择注册的 Web 应用程序。 回复 URLhttps://jwt.ms
  4. 选择“立即运行”。
  5. 浏览器会重定向到 BindID 登录页面。
  6. 输入注册的帐户电子邮件。
  7. 使用无应用 FIDO2 生物特征(例如指纹)对用户进行身份验证。
  8. 浏览器会重定向到 https://jwt.ms。 会显示 Azure AD B2C 返回的令牌内容。

后续步骤

有关更多信息,请查看以下文章: