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

使用 Azure Active Directory B2C 设置通过通用 OpenID Connect 注册与登录

重要

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

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

OpenID Connect 是在 OAuth 2.0 之上构建的身份验证协议,可用于安全的用户登录。 Azure AD B2C 支持使用此协议的大多数标识提供者。

本文介绍如何将自定义 OpenID Connect 身份提供商添加到用户流中。

重要

终端必须符合 Azure AD B2C 安全要求。 旧版 TLS 版本和密码已弃用。 有关详细信息,请参阅 Azure AD B2C TLS 和密码套件要求

先决条件

添加标识提供者

  1. 使用至少具有外部标识提供者管理员权限的帐户登录到 Azure 门户
  2. 如果有权访问多个租户,请选择顶部菜单中的“设置”图标,从“目录 + 订阅”菜单切换到你的 Azure AD B2C 租户。
  3. 选择 Azure 门户左上角的“所有服务” ,搜索并选择 Azure AD B2C
  4. 选择“标识提供程序”,然后选择“新建 OpenID Connect 提供程序” 。
  5. 输入“名称”。 例如,输入 Contoso

通过在策略的扩展文件中将 OpenID Connect 标识提供者添加到 ClaimsProviders 元素来定义该标识提供者。

  1. 打开 TrustFrameworkExtensions.xml

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

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

    <ClaimsProvider>
      <Domain>contoso.com</Domain>
      <DisplayName>Login with Contoso</DisplayName>
      <TechnicalProfiles>
        <TechnicalProfile Id="Contoso-OpenIdConnect">
          <DisplayName>Contoso</DisplayName>
          <Description>Login with your Contoso account</Description>
          <Protocol Name="OpenIdConnect"/>
          <Metadata>
            <Item Key="METADATA">https://your-identity-provider.com/.well-known/openid-configuration</Item>
            <Item Key="client_id">00001111-aaaa-2222-bbbb-3333cccc4444</Item>
            <Item Key="response_types">code</Item>
            <Item Key="scope">openid profile</Item>
            <Item Key="response_mode">form_post</Item>
            <Item Key="HttpBinding">POST</Item>
            <Item Key="UsePolicyInRedirectUri">false</Item>
          </Metadata>
          <!-- <CryptographicKeys>
            <Key Id="client_secret" StorageReferenceId="B2C_1A_ContosoSecret"/>
          </CryptographicKeys> -->
          <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="oid"/>
            <OutputClaim ClaimTypeReferenceId="tenantId" PartnerClaimType="tid"/>
            <OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="given_name" />
            <OutputClaim ClaimTypeReferenceId="surName" PartnerClaimType="family_name" />
            <OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="name" />
            <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="email" />
            <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" AlwaysUseDefaultValue="true" />
            <OutputClaim ClaimTypeReferenceId="identityProvider" PartnerClaimType="iss" />
            <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="oid"/>
          </OutputClaims>
          <OutputClaimsTransformations>
            <OutputClaimsTransformation ReferenceId="CreateRandomUPNUserName"/>
            <OutputClaimsTransformation ReferenceId="CreateUserPrincipalName"/>
            <OutputClaimsTransformation ReferenceId="CreateAlternativeSecurityId"/>
            <OutputClaimsTransformation ReferenceId="CreateSubjectClaimFromAlternativeSecurityId"/>
          </OutputClaimsTransformations>
          <UseTechnicalProfileForSessionManagement ReferenceId="SM-SocialLogin"/>
        </TechnicalProfile>
      </TechnicalProfiles>
    </ClaimsProvider>
    

配置标识提供者

每个 OpenID Connect 标识提供者都描述了一个元数据文档,其中包含执行登录所需的大部分信息。 元数据文档包括要使用的 URL 和服务的公有签名密钥的位置等信息。 OpenID Connect 元数据文档始终位于 以 结尾的终结点。.well-known/openid-configuration 对于您要添加的 OpenID Connect 身份提供商,请输入其元数据 URL。

元数据 URL 中,输入 OpenID Connect 元数据文档的 URL。

<Item Key="METADATA"> 技术配置文件元数据中,输入 OpenID Connect 元数据文档的 URL。

客户端 ID 和密钥

为了允许用户登录,身份提供商要求开发人员在其服务中注册应用程序。 此应用程序具有一个称为 客户端 ID 的 ID 和一个 客户端密钥

客户端密钥是可选的。 但是,如果 Response type(响应类型)code,则必须提供客户端密钥,该密钥用于将代码换取令牌。

要添加客户端 ID 和客户端密钥,请从身份提供商复制这些值,并将其输入到相应的字段中。

<Item Key="client_id"> 技术配置文件元数据中,输入客户端 ID。

创建策略密钥

如果需要客户端密码,请存储之前记录在 Azure AD B2C 租户中的客户端密码。

  1. 登录到 Azure 门户

  2. 确保正在使用的目录包含 Azure AD B2C 租户。 在门户工具栏中选择 Directory + subscription (目录 + 订阅 ) 筛选器。

  3. 在“门户设置 | 目录+订阅”页上的“目录名称”列表中找到你的 Azure AD B2C 目录,然后选择“切换”。

  4. 选择 Azure 门户左上角的“所有服务”,然后搜索并选择“Azure AD B2C” 。

  5. 在“概述”页上选择“标识体验框架”。

  6. 选择“策略密钥”,然后选择“添加”

  7. 对于“选项”,选择 Manual

  8. 输入策略密钥的名称。 例如,ContosoSecret。 前缀 B2C_1A_ 会自动添加到密钥名称。

  9. “机密”中,输入之前记录的客户端密码。

  10. 在“密钥用法”处选择

  11. 单击 “创建”

  12. CryptographicKeys在 XML 元素中,添加以下元素:

    <CryptographicKeys>
      <Key Id="client_secret" StorageReferenceId="B2C_1A_ContosoSecret"/>
    </CryptographicKeys>
    

范围

范围 定义您希望从身份提供商处收集的信息和权限,例如 openid profile. 要从身份提供商接收 ID 令牌, openid 必须指定范围。

如果没有 ID 令牌,用户无法使用自定义标识提供者登录到 Azure AD B2C。 其他范围可以追加以空格分隔。 请参阅自定义身份提供商的文档,了解哪些其他范围可能可用。

在“作用域”中,输入标识提供者的作用域。 例如,openid profile

<Item Key="scope"> 技术配置文件元数据中,输入标识提供者的作用域。 例如,openid profile

响应类型

响应类型描述在对 authorization_endpoint 自定义身份提供商的初始调用中发送回的信息类型。 可以使用以下响应类型:

  • code:根据 授权代码流,代码将返回给 Azure AD B2C。 Azure AD B2C 将继续调用 token_endpoint,以交换令牌代码。
  • id_token:ID 令牌将从自定义标识提供者返回到 Azure AD B2C。

Response type (响应类型) 中,根据您的身份提供商设置选择 code, 或 id_token

<Item Key="response_types"> 技术配置文件元数据中,根据标识提供者设置选择 codeid_token

响应模式

响应模式定义用于将数据从自定义标识提供者发送回 Azure AD B2C 的方法。 可以使用以下响应模式:

  • form_post:建议使用此响应模式以获得最佳安全性。 响应通过 HTTP POST 方法传输,并使用 application/x-www-form-urlencoded 格式将代码或令牌编码在正文中。
  • query:代码或 Token 作为查询参数返回。

Response mode (响应模式) 中,根据您的身份提供商设置 选择 form_postquery

<Item Key="response_mode"> 技术配置文件元数据中,根据标识提供者设置选择 form_postquery

域提示

域提示可用于直接跳至指定身份提供商的登录页面,而不是让用户在可用身份提供商列表中进行选择。

要允许此类行为,请输入 ___domain hint 的值。 若要跳转到自定义标识提供者,请在调用 Azure AD B2C 进行登录时将参数 domain_hint=<___domain hint value> 追加到请求的末尾。

Domain hint (域提示) 中,输入域提示中使用的域名。

<Domain>contoso.com</Domain> 技术配置文件 XML 元素中,输入域提示中使用的域名。 例如,contoso.com

声明映射

自定义标识提供者将 ID 令牌发送回 Azure AD B2C 后,Azure AD B2C 需要能够将收到的令牌中的声明映射到 Azure AD B2C 识别和使用的声明。 对于以下每个映射,请参阅自定义标识提供者的文档,以了解标识提供者的令牌中返回的声明:

  • 用户 ID:输入为已登录用户提供 唯一标识符 的声明。
  • 显示名称:输入为用户提供 显示名称全名 的声明。
  • 名字:输入提供用户名字的声明。
  • 姓氏:输入提供用户 姓氏 的声明。
  • 电子邮件:输入提供用户 电子邮件地址 的声明。

OutputClaims 元素包含您的身份提供商返回的声明列表。 将策略中定义的声明名称映射到标识提供者中定义的名称。 在 <OutputClaims> 元素下,使用标识提供者定义的相应声明名称配置 PartnerClaimType 属性。

ClaimTypeReferenceId 合作伙伴索赔类型
issuerUserId 输入为已登录用户提供 唯一标识符 的声明。
displayName 输入为用户提供 显示名称全名 的声明。
givenName 输入提供用户的名字的声明
surName 输入提供用户的姓氏的声明
email 输入提供用户 电子邮件地址 的声明。
identityProvider 输入提供令牌颁发者名称的声明。 例如,iss。 如果标识提供者不在令牌中包含颁发者声明,请使用标识提供者的唯一标识符来设置 DefaultValue 属性。 例如,DefaultValue="contoso.com"

将身份提供商添加到用户流

  1. 在 Azure AD B2C 租户中,选择“用户流” 。
  2. 单击要添加标识提供者的用户流。
  3. Social identity providers(社交身份提供商)下,选择您添加的身份提供商。 例如, Contoso
  4. 选择“保存”

测试用户流

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

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

添加用户旅程

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

  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="ContosoExchange" />
  </ClaimsProviderSelections>
  ...
</OrchestrationStep>

<OrchestrationStep Order="2" Type="ClaimsExchange">
  ...
  <ClaimsExchanges>
    <ClaimsExchange Id="ContosoExchange" TechnicalProfileReferenceId="Contoso-OpenIdConnect" />
  </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. 在注册或登录页中,选择“ Contoso 以使用 Google 帐户登录”。

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

已知问题

  • Azure AD B2C 不支持使用 JWE (JSON Web 加密) 与 OpenID Connect 标识提供者交换加密令牌。

后续步骤

有关更多信息,请参阅 OpenId Connect 技术概况 参考指南。