使用 Azure Active Directory B2C 设置通过微博帐户注册与登录

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

备注

此功能目前以公共预览版提供。

先决条件

创建 Weibo 应用程序

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

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

注册 Weibo 应用程序

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

将“Weibo”配置为标识提供者

  1. 以 Azure AD B2C 租户的全局管理员身份登录 Azure 门户
  2. 请确保使用包含 Azure AD B2C 租户的目录,方法是选择顶部菜单中的“目录 + 订阅”筛选器,然后选择包含租户的目录。
  3. 选择 Azure 门户左上角的“所有服务”,搜索并选择 Azure AD B2C
  4. 选择“标识提供者”,然后选择“微博(预览)”。
  5. 输入“名称”。 例如,Weibo。
  6. 对于 客户端 ID,输入你之前创建的 Weibo 应用程序的应用密钥。
  7. 对于“客户端密码”,输入已记录的“应用机密”。
  8. 选择“保存”。

将 Weibo 标识提供者添加到用户流

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

如果登录过程成功,则浏览器会重定向到 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”配置为标识提供者

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

可以通过在策略的扩展文件中将 Weibo 帐户添加到 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"UserJourney 元素的完整内容。
  3. 打开 TrustFrameworkExtensions.xml 并找到 UserJourneys 元素。 如果该元素不存在,请添加一个。
  4. 将复制的 UserJourney 元素的完整内容粘贴为 UserJourneys 元素的子级。
  5. 对用户旅程的 ID 进行重命名。 例如,Id="CustomSignUpSignIn"

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

拥有用户旅程后,将新标识提供者添加到用户旅程。 首先添加登录按钮,然后将按钮链接到操作。 该操作是前面创建的技术配置文件。

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

  2. 在下一个业务流程步骤中,添加 ClaimsExchange 元素。 将 ID 设置为 TargetClaimsExchangeId 的值。将 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 匹配。

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

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

上传自定义策略

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

测试自定义策略

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

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