使用 Azure Active Directory B2C 设置 Salesforce 帐户的注册与登录

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

注意

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

必备条件

创建一个 Salesforce 应用程序

要使用户能够在 Azure Active Directory B2C (Azure AD B2C) 中使用 Salesforce 帐户登录,需要在 Salesforce 应用管理器中创建一个应用程序。 有关详细信息,请参阅配置基本的连接应用设置启用 OAuth 设置以实现 API 集成

  1. 登录到 Salesforce
  2. 在菜单中选择“Setup”(设置)。
  3. 展开“Apps”(应用),然后选择“App Manager”(应用管理器)。
  4. 选择“New Connected App”(新建连接的应用)。
  5. 在“Basic Information”(基本信息)下,输入:
    1. Connected App Name(连接的应用名称)- 连接的应用名称显示在“App Manager”(应用管理器)以及自身的“App Launcher”(应用启动器)磁贴上。 该名称必须在整个组织中保持唯一。
    2. API Name(API 名称)
    3. Contact Email(联系人电子邮件地址)- Salesforce 的联系人电子邮件地址
  6. 在“API (Enable OAuth Settings)”(API (启用 OAuth 设置))下,选择“Enable OAuth Settings”(启用 OAuth 设置)。
    1. 对于“回调 URL”,输入 https://your-tenant-name.b2clogin.cn/your-tenant-name.partner.onmschina.cn/oauth2/authresp。 将 your-tenant-name 替换为租户的名称。 输入租户名称时,必须全部使用小写字母,即使租户是使用大写字母在 Azure AD B2C 中定义的,也是如此。
    2. 在“选定的 OAuth 范围”中,选择“访问标识 URL 服务(ID、个人资料、电子邮件、地址、电话)”和“允许访问你的唯一标识符(openid)”。
    3. 选择“Require Secret for Web Server Flow”(需要 Web 服务器流的机密)。
  7. 选择“Configure ID Token”(配置 ID 令牌)
    1. 将“Token Valid for”(令牌有效期)设置为 5 分钟。
    2. 选择“Include Standard Claims”(包括标准声明)。
  8. 单击“保存” 。
  9. 复制“Consumer Key”(使用者密钥)和“Consumer Secret”(使用者机密)的值。 将 Salesforce 配置为租户中的标识提供者时需要这两个凭据。 客户端密码是一个重要的安全凭据。

将 Salesforce 配置为标识提供者

  1. 如果有权访问多个租户,请选择顶部菜单中的“设置”图标,切换到“目录 + 订阅”菜单中的 Azure AD B2C 租户

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

  3. 选择“标识提供程序”,然后选择“新建 OpenID Connect 提供程序” 。

  4. 输入“名称”。 例如,输入 Salesforce

  5. 对于“元数据 URL”,请输入 Salesforce OpenID Connect 配置文档的 URL。 在沙盒中,login.salesforce.com 将替换为 test.salesforce.com。 在社区版中,login.salesforce.com 将替换为社区 URL,例如 username.force.com/.well-known/openid-configuration。 该 URL 必须包含 HTTPS。

    https://login.salesforce.com/.well-known/openid-configuration
    
  6. 对于“客户端 ID”,输入之前记录的应用程序 ID。

  7. 对于“客户端机密”,请输入之前记录的客户端机密。

  8. 对于“范围”,请输入 openid id profile email

  9. 对于“响应类型”和“响应模式” ,请保留默认值。

  10. (可选)对于“域提示”,请输入 contoso.com。 有关详细信息,请参阅使用 Azure Active Directory B2C 设置直接登录

  11. 在“标识提供者声明映射”下,选择以下声明:

    • 用户 IDsub
    • 显示名称:name
    • 给定名称:given_name
    • 姓氏:family_name
    • 电子邮件email
  12. 选择“保存”。

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

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

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

如果登录过程是成功的,则你的浏览器会被重定向到 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. 输入策略密钥的名称。 例如,SalesforceSecret。 前缀 B2C_1A_ 会自动添加到密钥名称。
  8. 在“机密”中,输入前面记录的应用程序机密。
  9. 在“密钥用法”处选择 Signature
  10. 单击“创建”。

将 Salesforce 配置为标识提供者

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

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

  1. 打开 TrustFrameworkExtensions.xml

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

  3. 如下所示添加新的 ClaimsProvider

    <ClaimsProvider>
      <Domain>salesforce.com</Domain>
      <DisplayName>Salesforce</DisplayName>
      <TechnicalProfiles>
        <TechnicalProfile Id="Salesforce-OpenIdConnect">
          <DisplayName>Salesforce</DisplayName>
          <Protocol Name="OpenIdConnect" />
          <Metadata>
            <Item Key="METADATA">https://login.salesforce.com/.well-known/openid-configuration</Item>
            <Item Key="response_types">code</Item>
            <Item Key="response_mode">form_post</Item>
            <Item Key="scope">openid id profile email</Item>
            <Item Key="HttpBinding">POST</Item>
            <Item Key="UsePolicyInRedirectUri">0</Item>
            <!-- Update the Client ID below to the Application ID -->
            <Item Key="client_id">Your Salesforce application ID</Item>
          </Metadata>
          <CryptographicKeys>
            <Key Id="client_secret" StorageReferenceId="B2C_1A_SalesforceSecret"/>
          </CryptographicKeys>
          <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="sub" />
            <OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="given_name" />
            <OutputClaim ClaimTypeReferenceId="surname" PartnerClaimType="family_name" />
            <OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="name" />
            <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="email" />
            <OutputClaim ClaimTypeReferenceId="identityProvider" DefaultValue="salesforce.com" AlwaysUseDefaultValue="true" />
            <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" AlwaysUseDefaultValue="true" />
          </OutputClaims>
          <OutputClaimsTransformations>
            <OutputClaimsTransformation ReferenceId="CreateRandomUPNUserName" />
            <OutputClaimsTransformation ReferenceId="CreateUserPrincipalName" />
            <OutputClaimsTransformation ReferenceId="CreateAlternativeSecurityId" />
          </OutputClaimsTransformations>
          <UseTechnicalProfileForSessionManagement ReferenceId="SM-SocialLogin" />
        </TechnicalProfile>
      </TechnicalProfiles>
    </ClaimsProvider>
    
  4. “元数据”设置为 Salesforce OpenID Connect 配置文档的 URL。 在沙盒中,login.salesforce.com 将替换为 test.salesforce.com。 在社区版中,login.salesforce.com 将替换为社区 URL,例如 username.force.com/.well-known/openid-configuration。 该 URL 必须包含 HTTPS。

  5. client_id 设置为应用程序注册中的应用程序 ID。

  6. 保存文件。

添加用户旅程

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

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

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

测试自定义策略

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

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

后续步骤

了解如何将 Salesforce 令牌传递给应用程序