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

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

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

注意

在 Azure Active Directory B2C 中,自定义策略主要用于解决复杂的情况。 在大多数情况下,建议你使用内置用户流。 如果尚未这样做,请从 Active Directory B2C 中的自定义策略入门了解自定义策略新手包。

必备条件

创建应用程序

要使用户能够在 Azure AD B2C 中使用 Twitter 帐户登录,需要创建一个 Twitter 应用程序。 如果没有 Twitter 帐户,可以在 https://twitter.com/signup 上注册。 此外,需要申请一个开发人员帐户。 有关详细信息,请参阅申请访问权限

  1. 使用 Twitter 帐户凭据登录到 Twitter 开发人员门户
  2. 选择“+ 创建项目”按钮。
  3. 在“项目名称”选项卡下,输入项目的首选名称,然后选择“下一步”按钮。
  4. 在“用例”选项卡下,选择首选用例,然后选择“下一步”。
  5. 在“项目说明”选项卡下,输入项目说明,然后选择“下一步”按钮。
  6. 在“应用名称”选项卡下,输入应用的名称,例如 azureadb2c,然后选择“下一步”按钮。
  7. 在“密钥和令牌”选项卡下,复制“API 密钥”和“API 密钥机密”的值。 稍后将使用它们进行配置。
  8. 选择“应用设置”以打开应用设置。
  9. 在页面的下半部分的“用户身份验证设置”下,选择“设置”。
  10. 在“应用类型”下,选择适当的应用类型,例如“Web 应用”。
  11. 在“应用信息”下:
    1. 对于“回叫 URL/重定向 URL”,输入 https://your-tenant-name.b2clogin.com/your-tenant-name.onmicrosoft.com/your-policy-id/oauth1/authresp。 如果使用自定义域,请输入 https://your-domain-name/your-tenant-name.onmicrosoft.com/your-user-flow-Id/oauth1/authresp。 输入租户名称和用户流 ID 时,请使用全小写字母,即使它们在 Azure AD B2C 中是使用大写字母定义也不例外。 将:
      • your-tenant-name 替换为租户的名称。
      • your-domain-name 替换为自定义域。
      • your-policy-id 替换为用户流的标识符。 例如,b2c_1a_signup_signin_twitter
    2. 对于“Website URL”(网站 URL),请输入 https://your-tenant.b2clogin.com。 将 your-tenant 替换为租户的名称。 例如,https://contosob2c.b2clogin.com。 如果使用自定义域,请输入 https://your-domain-name
    3. (可选)为“服务条款”输入一个 URL,例如 http://www.contoso.com/tos。 策略 URL 是为了提供应用程序使用条款和条件而保留的页面。
    4. (可选)为“隐私策略”输入一个 URL,例如 http://www.contoso.com/privacy。 策略 URL 是继续提供应用程序的隐私信息的页面。
  12. 选择“保存”。
  1. 使用 Twitter 帐户凭据登录到 Twitter 开发人员门户
  2. 选择“+ 创建项目”按钮。
  3. 在“项目名称”选项卡下,输入项目的首选名称,然后选择“下一步”按钮。
  4. 在“用例”选项卡下,选择首选用例,然后选择“下一步”。
  5. 在“项目说明”选项卡下,输入项目说明,然后选择“下一步”按钮。
  6. 在“应用名称”选项卡下,输入应用的名称,例如 azureadb2c,然后选择“下一步”按钮。
  7. 在“密钥&令牌”选项卡下,复制“API 密钥”和“API 密钥机密”的值供稍后使用。 稍后需要使用这两个值将 Twitter 配置为 Azure AD B2C 租户中的标识提供者。
  8. 选择“应用设置”以打开应用设置。
  9. 在页面的下半部分的“用户身份验证设置”下,选择“设置”。
  10. 在“应用类型”下,选择适当的应用类型,例如“Web 应用”。
  11. 在“应用信息”下:
    1. 对于“回叫 URL/重定向 URL”,输入 https://your-tenant.b2clogin.com/your-tenant-name.onmicrosoft.com/your-user-flow-name/oauth1/authresp。 如果使用自定义域,请输入 https://your-domain-name/your-tenant-name.onmicrosoft.com/your-user-flow-Id/oauth1/authresp。 输入租户名称和用户流 ID 时,请使用全小写字母,即使它们在 Azure AD B2C 中是使用大写字母定义也不例外。 将:
      • your-tenant-name 替换为租户的名称。
      • your-domain-name 替换为自定义域。
      • your-user-flow-name 替换为用户流的标识符。 例如,b2c_1_signup_signin_twitter
    2. 对于“Website URL”(网站 URL),请输入 https://your-tenant.b2clogin.com。 将 your-tenant 替换为租户的名称。 例如,https://contosob2c.b2clogin.com。 如果使用自定义域,请输入 https://your-domain-name
    3. 为“Terms of service”(服务条款)输入一个 URL,例如 http://www.contoso.com/tos。 策略 URL 是为了提供应用程序使用条款和条件而保留的页面。
    4. 为“Privacy policy”(隐私策略)输入一个 URL,例如 http://www.contoso.com/privacy。 策略 URL 是继续提供应用程序的隐私信息的页面。
  12. 选择“保存”。

将 Twitter 配置为标识提供者

  1. 以 Azure AD B2C 租户的全局管理员身份登录 Azure 门户
  2. 如果有权访问多个租户,请选择顶部菜单中的“设置”图标,从“目录 + 订阅”菜单切换到你的 Azure AD B2C 租户。
  3. 选择 Azure 门户左上角的“所有服务” ,搜索并选择 Azure AD B2C
  4. 依次选择“标识提供者”、“Twitter”。
  5. 输入“名称”。 例如 Twitter
  6. 对于“客户端 ID”,请输入前面创建的 Twitter 应用程序的“API 密钥”。
  7. 对于“客户端机密”,请输入记下的“API 密钥机密”。
  8. 选择“保存”。

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

此时,Twitter 标识提供者已设置,但还不能在任何登录页中使用。 将 Twitter 标识提供者添加到用户流:

  1. 在 Azure AD B2C 租户中,选择“用户流” 。
  2. 单击要将 Twitter 标识提供者添加到的用户流。
  3. 在“社交标识提供者”下,选择“Twitter”。
  4. 选择“保存”。

测试用户流

  1. 若要测试策略,请选择“运行用户流”。
  2. 对于“应用程序”,请选择前面已注册的名为“testapp1”的 Web 应用程序。 “回复 URL”应显示为 https://jwt.ms
  3. 选择“运行用户流”按钮。
  4. 在注册或登录页中,选择“Twitter”以使用 Twitter 帐户登录。

创建策略密钥

你需要存储前面在 Azure AD B2C 租户中为 Twitter 应用记录的机密密钥。

  1. 登录 Azure 门户
  2. 如果有权访问多个租户,请选择顶部菜单中的“设置”图标,从“目录 + 订阅”菜单切换到你的 Azure AD B2C 租户。
  3. 在 Azure 门户中,搜索并选择“Azure AD B2C”。
  4. 在左侧菜单中的“策略”下,选择“Identity Experience Framework”。
  5. 选择“策略密钥”,然后选择“添加”。
  6. 对于“选项”,请选择 Manual
  7. 输入策略密钥的名称。 例如,TwitterSecret。 前缀 B2C_1A_ 会自动添加到密钥名称。
  8. 对于“机密”,请输入之前记录的“API 密钥机密”值。
  9. 在“密钥用法”处选择 Signature
  10. 单击“创建”。

将 Twitter 配置为标识提供者

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

可以通过在策略的扩展文件中将 Twitter 帐户添加到 ClaimsProvider 元素,将该帐户定义为声明提供程序。 请参阅本文先决条件中下载的自定义策略初学者包。

  1. 打开 TrustFrameworkExtensions.xml

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

  3. 如下所示添加新的 ClaimsProvider

    <ClaimsProvider>
      <Domain>twitter.com</Domain>
      <DisplayName>Twitter</DisplayName>
      <TechnicalProfiles>
        <TechnicalProfile Id="Twitter-OAuth1">
          <DisplayName>Twitter</DisplayName>
          <Protocol Name="OAuth1" />
          <Metadata>
            <Item Key="ProviderName">Twitter</Item>
            <Item Key="authorization_endpoint">https://api.twitter.com/oauth/authenticate</Item>
            <Item Key="access_token_endpoint">https://api.twitter.com/oauth/access_token</Item>
            <Item Key="request_token_endpoint">https://api.twitter.com/oauth/request_token</Item>
            <Item Key="ClaimsEndpoint">https://api.twitter.com/1.1/account/verify_credentials.json?include_email=true</Item>
            <Item Key="ClaimsResponseFormat">json</Item>
            <Item Key="client_id">Your Twitter application API key</Item>
          </Metadata>
          <CryptographicKeys>
            <Key Id="client_secret" StorageReferenceId="B2C_1A_TwitterSecret" />
          </CryptographicKeys>
          <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="user_id" />
            <OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="screen_name" />
            <OutputClaim ClaimTypeReferenceId="email" />
            <OutputClaim ClaimTypeReferenceId="identityProvider" DefaultValue="twitter.com" />
            <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" />
          </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”的值替换为之前记录的“API 密钥”。

  5. 保存文件。

添加用户旅程

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

  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 设置为目标声明交换 ID 的值。将 TechnicalProfileReferenceId 的值更新为之前创建的技术配置文件的 ID 。

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

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

<OrchestrationStep Order="2" Type="ClaimsExchange">
  ...
  <ClaimsExchanges>
    <ClaimsExchange Id="TwitterExchange" TechnicalProfileReferenceId="Twitter-OAuth1" />
  </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),然后上传信赖方策略(例如 SignUpSignIn.xml)。

测试自定义策略

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

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

提示

如果在测试此标识提供者时遇到 unauthorized 错误,请确保使用正确的 Twitter API 密钥和 API 密钥机密,或尝试申请 提升 的访问权限。 此外,如果你在功能可用之前注册了应用,我们建议你查看 Twitter 的项目结构