使用 Azure Active Directory B2C 为微博帐户设置注册和登录功能

重要

自 2025 年 5 月 1 日起,Azure AD B2C 将不再可供新客户购买。 在我们的常见问题解答中了解详细信息。

在开始之前,请使用此页面顶部的 “选择策略类型 选择器”来选择要设置的策略类型。 Azure Active Directory B2C 提供了两种定义用户如何与应用程序交互的方法:通过预定义的用户流,或者通过可完全配置的自定义策略。 对于每种方法,本文中所需的步骤都不同。

注释

此功能目前为公共预览版。

先决条件

创建微博应用程序

若要在 Azure Active Directory B2C(Azure AD B2C)中使用微博帐户为用户启用登录,需要在微博开发人员门户中创建应用程序。 如果还没有微博帐户,可以注册 https://weibo.com。

  1. 使用微博帐户凭据登录到微博开发人员门户。
  2. 登录后,选择右上角的显示名称。
  3. 在下拉列表中,选择 编辑开发者信息 (编辑开发人员信息)。
  4. 输入所需的信息,然后选择 提交 (提交)。
  5. 完成电子邮件验证过程。
  6. 转到“身份验证”页。
  7. 输入所需的信息,然后选择 提交 (提交)。

注册微博应用程序

  1. 转到新的微博应用注册页。
  2. 输入必要的应用程序信息。
  3. 选择“创建”(create)。
  4. 复制 应用密钥 和 应用机密的值。 将标识提供者添加到租户时需要这两项。
  5. 上传所需的照片并输入所需的信息。
  6. 选择“保存以上信息”(save)。
  7. 选择 高级信息 (高级信息)。
  8. 选择 OAuth2.0“授权设置”(redirect URL) 字段旁边的“编辑”(edit)。
  9. 对于 OAuth2.0“授权设置”(重定向 URL),请输入 https://your-tenant-name.b2clogin.cn/your-tenant-name.partner.onmschina.cn/oauth2/authresp。 如果使用 自定义域,请输入 https://your-domain-name/your-tenant-name.partner.onmschina.cn/oauth2/authresp。 将 your-tenant-name 替换为租户的名称,将 your-domain-name 替换为您的自定义域。
  10. 选择 提交 (提交)。

将微博配置为身份标识提供者

  1. 使用至少具有外部标识提供者管理员权限的帐户登录到 Azure 门户。
  2. 如果有权访问多个租户,请选择顶部菜单中的“设置”图标,从“目录 + 订阅”菜单切换到你的 Azure AD B2C 租户。
  3. 选择 Azure 门户左上角的“所有服务” ,搜索并选择 Azure AD B2C。
  4. 选择“标识提供者”,然后选择“微博”(预览版)。
  5. 输入名称。 例如, 微博。
  6. 对于 客户端 ID,请输入之前创建的微博应用程序的应用密钥。
  7. 对于“客户端密码”,输入已记录的“应用机密”。
  8. 选择“保存”。

在用户流程中添加微博身份验证提供者

  1. 在 Azure AD B2C 租户中,选择“用户流” 。
  2. 单击要添加 Weibo 标识提供者的用户流。
  3. 在 “社交标识提供者”下,选择 “微博”。
  4. 选择“保存”。
  5. 若要测试策略,请选择“运行用户流”。
  6. 对于“应用程序”,请选择前面已注册的名为“testapp1”的 Web 应用程序。 回复 URL应显示https://jwt.ms。
  7. 选择“运行用户流”按钮。
  8. 在注册或登录页中,选择 微博 以使用微博帐户登录。

如果登录过程成功,浏览器将重定向到 https://jwt.ms,后者显示 Azure AD B2C 返回的令牌内容。

创建策略密钥

需要存储以前在 Azure AD B2C 租户中记录的客户端密码。

  1. 登录到 Azure 门户。
  2. 如果有权访问多个租户,请选择顶部菜单中的“设置”图标,从“目录 + 订阅”菜单切换到你的 Azure AD B2C 租户。
  3. 选择 Azure 门户左上角的“所有服务”,然后搜索并选择“Azure AD B2C” 。
  4. 在“概述”页上选择“标识体验框架”。
  5. 选择“策略密钥”,然后选择“添加”。
  6. 对于“选项”,选择 。Manual
  7. 输入策略密钥的名称。 例如,WeiboSecret。 前缀 B2C_1A_ 会自动添加到密钥名称。
  8. 在 “机密”中,输入之前记录的客户端密码。
  9. 对于密钥用法,请选择Signature。
  10. 单击 “创建” 。

将微博配置为身份标识提供者

要使用户能够使用 Weibo 帐户登录,需将该帐户定义为 Azure AD B2C 可通过终结点与之通信的声明提供程序。 该终结点将提供一组声明,Azure AD B2C 使用这些声明来验证特定的用户是否已完成身份验证。

通过将微博帐户添加到策略扩展文件中的 ClaimsProviders 元素,可以将微博帐户定义为声明提供程序。

  1. 打开 TrustFrameworkExtensions.xml。

  2. 找到 ClaimsProviders 元素。 如果该元素不存在,请在根元素下添加它。

  3. 添加一个新的 ClaimsProvider,如下所示:

    <ClaimsProvider>
      <Domain>weibo.com</Domain>
      <DisplayName>Weibo (Preview)</DisplayName>
      <TechnicalProfiles>
        <TechnicalProfile Id="Weibo-OAuth2">
          <DisplayName>Weibo</DisplayName>
          <Protocol Name="OAuth2" />
          <Metadata>
            <Item Key="ProviderName">weibo</Item>
            <Item Key="authorization_endpoint">https://api.weibo.com/oauth2/authorize</Item>
            <Item Key="AccessTokenEndpoint">https://api.weibo.com/oauth2/access_token</Item>
            <Item Key="ClaimsEndpoint">https://api.weibo.com/2/account/get_uid.json</Item>
            <Item Key="scope">email</Item>
            <Item Key="HttpBinding">POST</Item>
            <Item Key="external_user_identity_claim_id">uid</Item>
            <Item Key="client_id">Your Weibo application ID</Item>
          </Metadata>
          <CryptographicKeys>
            <Key Id="client_secret" StorageReferenceId="B2C_1A_WeiboSecret" />
          </CryptographicKeys>
          <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="numericUserId" PartnerClaimType="uid" />
            <OutputClaim ClaimTypeReferenceId="identityProvider" DefaultValue="weibo.com" AlwaysUseDefaultValue="true" />
            <OutputClaim ClaimTypeReferenceId="displayName" DefaultValue="Weibo User" />
            <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" AlwaysUseDefaultValue="true" />
            <OutputClaim ClaimTypeReferenceId="UserId" />
          </OutputClaims>
          <OutputClaimsTransformations>
            <OutputClaimsTransformation ReferenceId="CreateIssuerUserId" />
            <OutputClaimsTransformation ReferenceId="CreateRandomUPNUserName"/>
            <OutputClaimsTransformation ReferenceId="CreateUserPrincipalName"/>
            <OutputClaimsTransformation ReferenceId="CreateAlternativeSecurityId"/>
            <OutputClaimsTransformation ReferenceId="CreateSubjectClaimFromAlternativeSecurityId"/>
          </OutputClaimsTransformations>
          <UseTechnicalProfileForSessionManagement ReferenceId="SM-SocialLogin" />
        </TechnicalProfile>
      </TechnicalProfiles>
    </ClaimsProvider>
    <ClaimsProvider>
    
  4. 将client_id设置为应用程序注册中的应用程序 ID。

  5. 保存文件。

添加声明转换

GitHub 技术配置文件要求 将 CreateIssuerUserId 声明转换添加到 ClaimsTransformations 列表。 如果没有在文件中定义的 ClaimsTransformations 元素,请添加父 XML 元素,如下所示。 声明转换还需要定义名为 numericUserId 的新声明类型。

  1. 搜索 BuildingBlocks 元素。 如果该元素不存在,请添加该元素。
  2. 找到 ClaimsSchema 元素。 如果该元素不存在,请添加该元素。
  3. 将 numericUserId 声明添加到 ClaimsSchema 元素。
  4. 找到 ClaimsTransformations 元素。 如果该元素不存在,请添加该元素。
  5. 将 CreateIssuerUserId 声明转换添加到 ClaimsTransformations 元素中。
<BuildingBlocks>
  <ClaimsSchema>
    <ClaimType Id="numericUserId">
      <DisplayName>Numeric user Identifier</DisplayName>
      <DataType>long</DataType>
    </ClaimType>
  </ClaimsSchema>
  <ClaimsTransformations>
    <ClaimsTransformation Id="CreateIssuerUserId" TransformationMethod="ConvertNumberToStringClaim">
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="numericUserId" TransformationClaimType="inputClaim" />
      </InputClaims>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="issuerUserId" TransformationClaimType="outputClaim" />
      </OutputClaims>
    </ClaimsTransformation>
  </ClaimsTransformations>
</BuildingBlocks>

添加用户旅程

此时,标识提供者已设置,但还不能在任何登录页中使用。 如果你没有自己的自定义用户旅程,请创建现有模板用户旅程的副本,否则,请继续执行下一步。

  1. 打开初学者包中的 TrustFrameworkBase.xml 文件。
  2. 找到并复制包含 的 Id="SignUpOrSignIn" 元素的完整内容。
  3. 打开 TrustFrameworkExtensions.xml 并找到 UserJourneys 元素。 如果该元素不存在,请添加一个。
  4. 将您复制的 UserJourney 元素的完整内容粘贴到 UserJourneys 元素下作为其子项。
  5. 对用户旅程的 ID 进行重命名。 例如,Id="CustomSignUpSignIn"。

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

现在你已拥有用户旅程,请将新的身份提供者添加到用户旅程中。 首先添加一个“登录”按钮,然后将该按钮链接到某个操作。 该操作是前面创建的技术配置文件。

  1. 在用户旅程中,查找包含 Type="CombinedSignInAndSignUp" 或 Type="ClaimsProviderSelection" 的业务流程步骤元素。 通常这是第一个编排步骤。 ClaimsProviderSelections 元素包含用户可以用来登录的标识提供者列表。 元素的顺序将决定向用户显示的登录按钮的顺序。 添加ClaimsProviderSelection XML 元素。 将 TargetClaimsExchangeId 的值设置为易记名称。

  2. 在下一个编排步骤中,添加 ClaimsExchange 元素。 将 ID 设为目标声明交换 ID 的值。将 TechnicalProfileReferenceId 的值更新为先前创建的技术配置文件的 ID。

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

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

<OrchestrationStep Order="2" Type="ClaimsExchange">
  ...
  <ClaimsExchanges>
    <ClaimsExchange Id="WeiboExchange" TechnicalProfileReferenceId="Weibo-OAuth2" />
  </ClaimsExchanges>
</OrchestrationStep>

配置信赖方策略

信赖方策略(例如 SignUpSignIn.xml)指定 Azure AD B2C 将执行的用户旅程。 在信赖方内查找 DefaultUserJourney 元素。 更新 ReferenceId,使其与已在其中添加标识提供者的用户旅程 ID 匹配。

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

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

上传自定义策略

  1. 登录到 Azure 门户。
  2. 在门户工具栏中选择“目录 + 订阅”图标,然后选择包含 Azure AD B2C 租户的目录。
  3. 在 Azure 门户中,搜索并选择 Azure AD B2C。
  4. 在“策略”下,选择“Identity Experience Framework”。
  5. 选择“上传自定义策略”,然后上传已更改的两个策略文件,其顺序为:先上传扩展策略(例如 ),然后上传信赖方策略(例如 TrustFrameworkExtensions.xml)。

测试自定义策略

  1. 选择依赖方策略,例如 B2C_1A_signup_signin。
  2. 对于应用程序,请选择您前面注册的 Web 应用程序。 回复 URL应显示https://jwt.ms。
  3. 选择“立即运行”按钮。
  4. 在注册或登录页中,选择 微博 以使用微博帐户登录。

如果登录过程成功,浏览器将重定向到 https://jwt.ms,后者显示 Azure AD B2C 返回的令牌内容。