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

教程:为 Azure Active Directory B2C 配置 BlokSec 以进行无密码身份验证

开始之前

Azure Active Directory B2C 提供两种方法来定义用户与应用程序的交互:预定义的用户流,或可配置的自定义策略。

注意

在 Azure Active Directory B2C 中,自定义策略主要用于处理复杂的方案。 对于大多数方案,我们建议使用内置用户流。
请参阅用户流和自定义策略概述

Azure AD B2C 和 BlokSec

了解如何将 Azure Active Directory B2C (Azure AD B2C) 身份验证与 BlokSec 分散式身份识别路由器集成。 BlokSec 解决方案通过无密码身份验证和无令牌多重身份验证来简化用户登录。 该解决方案可以保护客户免受标识相关的攻击,例如密码填充、网络钓鱼和中间人攻击。

若要了解详细信息,请访问 bloksec.com:BlokSec Technologies Inc.

方案描述

BlokSec 集成包括以下组件:

  • Azure AD B2C – 用于 B2C 应用程序的授权服务器和标识提供者 (IdP)
  • BlokSec 分散式身份识别路由器 – 应用 BlokSec DIaaS 以将身份验证和授权请求路由到用户个人标识提供者 (PIdP) 应用程序的服务的网关
    • 它是 Azure AD B2C 中的 OpenID Connect (OIDC) 标识提供者
  • BlokSec 基于 SDK 的移动应用 - 分散式身份验证方案中的用户 PIdP。
    • 如果你未使用 BlokSec SDK,请转到 Google Play 获取免费的 BlokSec yuID

以下体系结构示意图演示了 BlokSec 解决方案实现中的注册和登录流。

BlokSec 解决方案实现中的注册和登录流的示意图。

  1. 用户登录到 Azure AD B2C 应用程序,然后转到 Azure AD B2C 登录和注册策略
  2. Azure AD B2C 使用 OIDC 授权代码流将用户重定向到 BlokSec 分散式身份识别路由器。
  3. BlokSec 路由器向用户移动应用发送推送通知,其中包含身份验证和授权请求详细信息。
  4. 用户查看身份验证质询。 系统提示已接受质询的用户进行生物识别,例如指纹或人脸扫描。
  5. 使用用户的唯一数字密钥对响应进行数字签名。 身份验证响应提供拥有、存在和同意证明。 响应返回到路由器。
  6. 路由器根据存储在分布式账本中的用户不可变唯一公钥验证数字签名。 路由器使用身份验证结果回复 Azure AD B2C。
  7. 授予或拒绝用户访问权限。

启用 BlokSec

  1. 转到 bloksec.com 并选择“请求演示”租户。
  2. 在消息字段中,指明你想要与 Azure AD B2C 集成。
  3. 下载并安装免费的 BlokSec yuID 移动应用。
  4. 准备好演示租户后,你会收到一封电子邮件。
  5. 在装有 BlokSec 应用程序的移动设备上,选择相应的链接以将管理员帐户注册到 yuID 应用。

先决条件

要开始,需要:

另外请参阅教程:在 Azure AD B2C 中创建用户流和自定义策略

在 BlokSec 中创建应用程序注册

在来自 BlokSec 的帐户注册电子邮件中,找到 BlokSec 管理控制台的链接。

  1. 登录到 BlokSec 管理控制台。
  2. 在主仪表板上,选择“添加应用程序”>“创建自定义应用程序”。
  3. 对于“名称”,请输入 Azure AD B2C 或应用程序名称。
  4. 对于“SSO 类型”,请选择“OIDC”。
  5. 对于“徽标 URI”,请输入徽标图像的链接。
  6. 对于“重定向 URI”,请使用 https://your-B2C-tenant-name.b2clogin.com/your-B2C-tenant-name.onmicrosoft.com/oauth2/authresp。 例如,https://fabrikam.b2clogin.com/fabrikam.onmicrosoft.com/oauth2/authresp。 对于自定义域,请输入 https://your-domain-name/your-tenant-name.onmicrosoft.com/oauth2/authresp
  7. 对于“注销后重定向 URI”,请输入 https://your-B2C-tenant-name.b2clogin.com/your-B2C-tenant-name.onmicrosoft.com/{policy}/oauth2/v2.0/logout
  8. 选择创建的 Azure AD B2C 应用程序以打开应用程序配置。
  9. 选择“生成应用机密”。

详细了解:发送注销请求

注意

需要使用应用程序 ID 和应用程序机密在 Azure AD B2C 中配置标识提供者 (IdP)。

在 Azure AD B2C 中添加新的标识提供者

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

  1. 以 Azure AD B2C 租户的全局管理员身份登录到 Azure 门户
  2. 在门户工具栏中,选择“目录 + 订阅”。
  3. 在“门户设置”>“目录 + 订阅”页上的“目录名称”列表中,找到你的 Azure AD B2C 目录。
  4. 选择“切换”。
  5. 在 Azure 门户左上角,选择“所有服务”。
  6. 搜索并选择“Azure AD B2C”。
  7. 导航到“仪表板”>“Azure Active Directory B2C”>“标识提供者”。
  8. 选择“新的 OpenID Connect 提供程序”
  9. 选择 添加

配置标识提供者

  1. 选择“标识提供者类型”>“OpenID Connect”
  2. 对于“名称”,请输入“BlokSec yuID Passwordless”或其他名称。
  3. 对于“元数据 URL”,请输入 https://api.bloksec.io/oidc/.well-known/openid-configuration
  4. 对于“客户端 IDV”,请输入 BlokSec 管理 UI 中的应用程序 ID。
  5. 对于“客户端机密”,请输入 BlokSec 管理 UI 中的应用程序机密。
  6. 对于“范围”,请选择“OpenID 电子邮件配置文件”。
  7. 对于“响应类型”,请选择“代码”。
  8. 对于“域提示”,请选择“yuID”。
  9. 选择“确定”。
  10. 选择“映射此标识提供者的声明”。
  11. 对于“用户 ID”,请选择“sub”。
  12. 对于“显示名称”,请选择“name”。
  13. 对于“名字”,请使用“given_name”。
  14. 姓氏”使用 family_name
  15. 电子邮件”使用 email
  16. 选择“保存”。

用户注册

  1. 使用提供的凭据登录到 BlokSec 管理控制台。
  2. 导航到之前创建的 Azure AD B2C 应用程序。
  3. 在右上角,选择齿轮图标。
  4. 选择“创建帐户”。
  5. 在“创建帐户”中输入用户信息。 记下“帐户名称”。
  6. 选择“提交”。

将有一封帐户注册电子邮件发送到用户提供的电子邮件地址。 指示用户在装有 BlokSec yuID 应用的移动设备上选择注册链接。

创建用户流策略

对于以下说明,请确保 BlokSec 是新的 OIDC 标识提供者 (IdP)。

  1. 在 Azure AD B2C 租户中的“策略”下,选择“用户流”。
  2. 选择“新建用户流”。
  3. 选择“注册和登录”>“版本”>“创建”。
  4. 输入策略名称。
  5. 在标识提供者部分,选择创建的 BlokSec 标识提供者。
  6. 对于“本地帐户”,请选择“无”。 此操作将禁用基于电子邮件和密码的身份验证。
  7. 选择“运行用户流”
  8. 在表单中,输入回复 URL,如 https://jwt.ms
  9. 浏览器将重定向到 BlokSec 登录页。
  10. 输入用户注册中的帐户名称。
  11. 用户会在装有 BlokSec yuID 应用程序的移动设备上收到一条推送通知。
  12. 用户打开该通知,随即会显示身份验证质询。
  13. 如果已接受身份验证,浏览器会将用户重定向到回复 URL。

注意

在 Azure Active Directory B2C 中,自定义策略主要用于处理复杂的方案。 对于大多数方案,我们建议使用内置用户流。
请参阅用户流和自定义策略概述

创建策略密钥

请将记下的客户端机密存储在你的 Azure AD B2C 租户中。 对于以下说明,请使用包含你的 Azure AD B2C 租户的目录。

  1. 登录 Azure 门户
  2. 在门户工具栏中,选择“目录 + 订阅”。
  3. 在“门户设置”>“目录 + 订阅”页上的“目录名称”列表中,找到你的 Azure AD B2C 目录。
  4. 选择“切换”。
  5. 在 Azure 门户左上角,选择“所有服务”
  6. 搜索并选择“Azure AD B2C”。
  7. 在“概述”页上,选择“Identity Experience Framework”。
  8. 选择“策略密钥”。
  9. 选择 添加
  10. 对于“选项”,选择“手动”。
  11. 输入策略密钥的策略名称。 例如,BlokSecAppSecret。 密钥名称中将添加前缀 B2C_1A_
  12. 在“机密”中,输入前面记下的客户端机密。
  13. 对于“密钥用法”,请选择“签名” 。
  14. 选择“创建”。

将 BlokSec 配置为标识提供者

要让用户能够使用 BlokSec 分散式身份识别登录,请将 BlokSec 定义为声明提供程序。 此操作确保 Azure AD B2C 通过某个终结点与其通信。 Azure AD B2C 使用终结点声明通过指纹或人脸扫描等生物识别来验证用户身份。

若要将 BlokSec 定义为声明提供程序,请将其添加到策略扩展文件中的 ClaimsProvider 元素。

  1. 打开 TrustFrameworkExtensions.xml

  2. 找到 ClaimsProviders 元素。 如果该元素未显示,请将其添加到根元素下。

  3. 若要添加新的 ClaimsProvider,请使用以下代码:

    <ClaimsProvider>
      <Domain>bloksec</Domain>
      <DisplayName>BlokSec</DisplayName>
      <TechnicalProfiles>
        <TechnicalProfile Id="BlokSec-OpenIdConnect">
          <DisplayName>BlokSec</DisplayName>
          <Description>Login with your BlokSec decentriled identity</Description>
          <Protocol Name="OpenIdConnect" />
          <Metadata>
            <Item Key="METADATA">https://api.bloksec.io/oidc/.well-known/openid-configuration</Item>
            <!-- Update the Client ID below to the BlokSec Application ID -->
            <Item Key="client_id">00000000-0000-0000-0000-000000000000</Item>
            <Item Key="response_types">code</Item>
            <Item Key="scope">openid profile email</Item>
            <Item Key="response_mode">form_post</Item>
            <Item Key="HttpBinding">POST</Item>
            <Item Key="UsePolicyInRedirectUri">false</Item>
            <Item Key="DiscoverMetadataByTokenIssuer">true</Item>
            <Item Key="ValidTokenIssuerPrefixes">https://api.bloksec.io/oidc</Item>
          </Metadata>
          <CryptographicKeys>
            <Key Id="client_secret" StorageReferenceId="B2C_1A_BlokSecAppSecret" />
          </CryptographicKeys>
          <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="sub" />
            <OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="name" />
            <OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="given_name" />
            <OutputClaim ClaimTypeReferenceId="surName" PartnerClaimType="family_name" />
            <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="email" />
            <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" AlwaysUseDefaultValue="true" />
            <OutputClaim ClaimTypeReferenceId="identityProvider" PartnerClaimType="iss" />
          </OutputClaims>
          <OutputClaimsTransformations>
            <OutputClaimsTransformation ReferenceId="CreateRandomUPNUserName" />
            <OutputClaimsTransformation ReferenceId="CreateUserPrincipalName" />
            <OutputClaimsTransformation ReferenceId="CreateAlternativeSecurityId" />
            <OutputClaimsTransformation ReferenceId="CreateSubjectClaimFromAlternativeSecurityId" />
          </OutputClaimsTransformations>
          <UseTechnicalProfileForSessionManagement ReferenceId="SM-SocialLogin" />
        </TechnicalProfile>
      </TechnicalProfiles>
    </ClaimsProvider>
    
  4. client_id 设置为应用程序注册中的应用程序 ID。

  5. 选择“保存”。

添加用户旅程

如果设置了标识提供者,但它未显示在任何登录页中,请按照以下说明操作。 如果你没有自定义用户旅程,请复制一个模板用户旅程。

  1. 在初学者包中,打开 TrustFrameworkBase.xml 文件。
  2. 找到并复制包含 ID=SignUpOrSignIn 的 UserJourneys 元素的内容。
  3. 打开 TrustFrameworkExtensions.xml
  4. 找到 UserJourneys 元素。 如果该元素未显示,请添加一个。
  5. 将复制的 UserJourney 元素内容粘贴为 UserJourneys 元素的子项。
  6. 重命名用户旅程 ID。 例如,ID=CustomSignUpSignIn

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

如果你有用户旅程,请将新的标识提供者添加到其中。 首先添加一个登录按钮,然后将其链接到某个操作,即创建的技术配置文件。

  1. 在用户旅程中,找到包含 Type=CombinedSignInAndSignUp 或 Type=ClaimsProviderSelection 的业务流程步骤元素。 这通常是第一个业务流程步骤。 ClaimsProviderSelections 元素包含用于用户登录的标识提供者列表。 元素顺序控制了向用户显示登录按钮的顺序。
  2. 添加 ClaimsProviderSelection XML 元素。
  3. 将 TargetClaimsExchangeId 的值设置为易记名称。
  4. 在下一个业务流程步骤中,添加 ClaimsExchange 元素。
  5. 将 ID 设为目标声明交换 ID 的值。
  6. 将 TechnicalProfileReferenceId 的值更新为创建的技术配置文件的 ID。

以下 XML 演示了使用标识提供者执行的前两个用户旅程业务流程步骤:

<OrchestrationStep Order="1" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="api.signuporsignin">
  <ClaimsProviderSelections>
    ...
    <ClaimsProviderSelection TargetClaimsExchangeId="BlokSecExchange" />
  </ClaimsProviderSelections>
  ...
</OrchestrationStep>

<OrchestrationStep Order="2" Type="ClaimsExchange">
  ...
  <ClaimsExchanges>
    <ClaimsExchange Id="BlokSecExchange" TechnicalProfileReferenceId="BlokSec-OpenIdConnect" />
  </ClaimsExchanges>
</OrchestrationStep>

配置信赖方策略

信赖方策略(例如 SignUpSignIn.xml)指定 Azure AD B2C 执行的用户旅程。

  1. 在信赖方中找到 DefaultUserJourney 元素。
  2. 更新 ReferenceId,使其与已在其中添加标识提供者的用户旅程 ID 匹配。

在以下示例中,对于 CustomSignUpOrSignIn 用户旅程,将 ReferenceId 设置为 CustomSignUpOrSignIn

<RelyingParty>
  <DefaultUserJourney ReferenceId="CustomSignUpSignIn" />
  ...
</RelyingParty>

上传自定义策略

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

  1. 登录 Azure 门户
  2. 在门户工具栏中,选择“目录 + 订阅”。
  3. 在“门户设置”>“目录 + 订阅”页上的“目录名称”列表中,找到你的 Azure AD B2C 目录
  4. 选择“切换”。
  5. 在 Azure 门户中,搜索并选择“Azure AD B2C”。
  6. 在“策略”下,选择“Identity Experience Framework”。
  7. 选择“上传自定义策略”。
  8. 按以下顺序上传已更改的两个策略文件:
  • 扩展策略,例如 TrustFrameworkExtensions.xml
  • 信赖方策略,例如 SignUpSignIn.xml

测试自定义策略

  1. 选择信赖方策略,例如 B2C_1A_signup_signin
  2. 对于“应用程序”,请选择已注册的 Web 应用程序。
  3. “回复 URL”显示为 https://jwt.ms
  4. 选择“立即运行”。
  5. 在注册或登录页面中,选择“Google”以使用 Google 帐户登录。
  6. 浏览器将重定向到 https://jwt.ms。 查看 Azure AD B2C 返回的令牌内容。

详细了解:教程:在 Azure Active Directory B2C 中注册 Web 应用程序

后续步骤