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

保护用于 AAD B2C 中 API 连接器的 API

在 Azure AD B2C 用户流中集成 REST API 时,必须通过身份验证保护你的 REST API 终结点。 REST API 身份验证可确保只有具备适当凭据的服务(例如,Azure AD B2C)可以调用该终结点。 本文探讨如何保护 REST API。

先决条件

完成向注册用户流添加 API 连接器指南中的步骤。

可以使用 HTTP 基本身份验证或 HTTPS 客户端证书身份验证来保护 API 终结点。 在任何一种情况下,当 Azure AD B2C 调用 API 终结点时,都要提供其使用的凭据。 然后,API 终结点将检查凭据并执行授权决策。

HTTP 基本身份验证

HTTP 基本身份验证在 RFC 2617 中进行定义。 身份验证的原理如下:

  • Azure AD B2C 使用 Authorization 头中的客户端凭据(usernamepassword)发送 HTTP 请求。

  • 凭据的格式是 base64 编码的字符串 username:password

  • 然后,API 负责检查这些值以执行其他授权决策。

若要为 API 连接器配置 HTTP 基本身份验证,请执行下列步骤:

  1. 登录到 Azure 门户
  2. 在“Azure 服务”下,选择“Azure AD B2C”或搜索并选择“Azure AD B2C”。
  3. 选择“API 连接器”,然后选择要配置的“API 连接器” 。
  4. 对于“身份验证类型”,请选择“基本”。
  5. 提供 REST API 终结点的“用户名”和“密码”。 Providing basic authentication configuration for an API connector.
  6. 选择“保存”。

添加 REST API 用户名和密码策略密钥

要使用 HTTP 基本身份验证配置 REST API 技术配置文件,请创建以下加密密钥来存储用户名和密码:

  1. 登录 Azure 门户
  2. 如果有权访问多个租户,请选择顶部菜单中的“设置”图标,切换到“目录 + 订阅”菜单中的 Azure AD B2C 租户。
  3. 选择 Azure 门户左上角的“所有服务”,然后搜索并选择“Azure AD B2C” 。
  4. 在“概述”页上选择“标识体验框架”。
  5. 选择“策略密钥”,然后选择“添加” 。
  6. 对于“选项”,请选择“手动” 。
  7. 键入 RestApiUsername 作为名称 。 可能会自动添加前缀 B2C_1A_
  8. 在“密钥”框中,输入 REST API 用户名。
  9. 对于“密钥用法”,请选择“加密” 。
  10. 选择“创建”。
  11. 再次选择“策略密钥”。
  12. 选择 添加
  13. 对于“选项”,请选择“手动” 。
  14. 键入 RestApiPassword 作为名称 。 可能会自动添加前缀 B2C_1A_
  15. 在“密钥”框中,输入 REST API 密钥。
  16. 对于“密钥用法”,请选择“加密” 。
  17. 选择“创建”。

将 REST API 技术配置文件配置为使用 HTTP 基本身份验证

创建所需的密钥后,配置 REST API 技术配置文件元数据来引用凭据。

  1. 在工作目录中,打开扩展策略文件 (TrustFrameworkExtensions.xml)。
  2. 搜索 REST API 技术配置文件, 例如 REST-ValidateProfileREST-GetProfile
  3. 找到 <Metadata> 元素。
  4. 将 AuthenticationType 更改为 Basic
  5. 将 AllowInsecureAuthInProduction 更改为 false
  6. 紧靠在 </Metadata> 元素右括号的后面添加以下 XML 片段:
    <CryptographicKeys>
        <Key Id="BasicAuthenticationUsername" StorageReferenceId="B2C_1A_RestApiUsername" />
        <Key Id="BasicAuthenticationPassword" StorageReferenceId="B2C_1A_RestApiPassword" />
    </CryptographicKeys>
    

以下 XML 代码片段是已配置 HTTP 基本身份验证的 RESTful 技术配置文件示例:

<ClaimsProvider>
  <DisplayName>REST APIs</DisplayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="REST-GetProfile">
      <DisplayName>Get user extended profile Azure Function web hook</DisplayName>
      <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
      <Metadata>
        <Item Key="ServiceUrl">https://your-account.azurewebsites.net/api/GetProfile?code=your-code</Item>
        <Item Key="SendClaimsIn">Body</Item>
        <Item Key="AuthenticationType">Basic</Item>
        <Item Key="AllowInsecureAuthInProduction">false</Item>
      </Metadata>
      <CryptographicKeys>
        <Key Id="BasicAuthenticationUsername" StorageReferenceId="B2C_1A_RestApiUsername" />
        <Key Id="BasicAuthenticationPassword" StorageReferenceId="B2C_1A_RestApiPassword" />
      </CryptographicKeys>
      ...
    </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>

HTTPS 客户端证书身份验证

客户端证书身份验证是一种基于证书的相互身份验证,其中客户端 Azure AD B2C 向服务器提供客户端证书来证明自己的身份。 此操作在 SSL 握手期间发生。 API 负责验证属于有效客户端(例如 Azure AD B2C)的证书,并执行授权决策。 客户端证书是一种 X.509 数字证书。

重要

在生产环境中,证书必须由证书颁发机构进行签名。

创建证书

若要创建证书,可以使用 Azure 密钥保管库,其中提供了适用于自签名证书的选项,以及与证书颁发者提供程序相集成以便为证书签名的选项。 建议的设置包括:

  • 使用者CN=<yourapiname>.<tenantname>.onmicrosoft.com
  • 内容类型PKCS #12
  • 生存期操作类型Email all contacts at a given percentage lifetimeEmail all contacts a given number of days before expiry
  • 密钥类型RSA
  • 密钥大小2048
  • 可导出的私钥:Yes(以便能够导出 .pfx 文件)

然后,你可以导出该证书

选项 2:使用 PowerShell 模块准备自签名证书

如果你还没有证书,则可以使用自签名证书。 自签名证书是未由证书颁发机构 (CA) 签署的安全证书,不提供由 CA 签名的证书的安全保障。

在 Windows 上,可在 PowerShell 中使用 New-SelfSignedCertificate cmdlet 来生成证书。

  1. 运行以下 PowerShell 命令来生成自签名证书。 根据应用程序和 Azure AD B2C 租户名称修改 -Subject 参数,如 contosowebapp.contoso.onmicrosoft.com。 还可调整 -NotAfter 日期,为证书指定不同的过期日期。

    New-SelfSignedCertificate `
        -KeyExportPolicy Exportable `
        -Subject "CN=yourappname.yourtenant.onmicrosoft.com" `
        -KeyAlgorithm RSA `
        -KeyLength 2048 `
        -KeyUsage DigitalSignature `
        -NotAfter (Get-Date).AddMonths(12) `
        -CertStoreLocation "Cert:\CurrentUser\My"
    
  2. 在 Windows 计算机上,搜索并选择“管理用户证书”

  3. 在“证书 - 当前用户”下,选择“个人”>“证书”>“yourappname.yourtenant.onmicrosoft.com” 。

  4. 选择该证书,然后依次选择“操作”>“所有任务”>“导出”。

  5. 选择“下一步”>“是,导出私钥”>“下一步” 。

  6. 接受“导出文件格式”的默认值,然后选择“下一步” 。

  7. 启用“密码”选项,输入证书的密码,然后选择“下一步” 。

  8. 若要指定保存证书的位置,请选择“浏览”并导航到所选的目录。

  9. 在“另存为”窗口中,输入文件名,然后选择“保存” 。

  10. 选择“下一步”>“完成”。

要让 Azure AD B2C 接受 .pfx 文件密码,必须在 Windows 证书存储导出实用工具中使用 TripleDES-SHA1 选项,而不是 AES256-SHA256 对此密码进行加密。

配置 API 连接器

若要为 API 连接器配置客户端证书身份验证,请执行下列步骤:

  1. 登录到 Azure 门户
  2. 在“Azure 服务”下,选择“Azure AD B2C”。
  3. 选择“API 连接器”,然后选择要配置的“API 连接器” 。
  4. 对于“身份验证类型”,请选择“证书”。
  5. 在“上传证书”框中,选择包含私钥的证书 .pfx 文件。
  6. 在“输入密码”框中,键入证书的密码。 Providing certificate authentication configuration for an API connector.
  7. 选择“保存”。

执行授权决策

API 必须根据发送的客户端证书实现授权,以便保护 API 终结点。 对于 Azure 应用服务和 Azure Functions,请参阅配置 TLS 相互身份验证来了解如何通过 API 代码启用和验证证书。 也可以将 Azure API 管理用作任何 API 服务前面的层,以根据所需值检查客户端证书属性

续订证书

建议针对证书过期时间设置提醒警报。 当所使用的证书即将到期时,需要生成新的证书并重复上述步骤。 为了“滚动”使用新证书,API 服务可以在部署新证书期间继续暂时接受新旧证书。

若要将新证书上传到现有 API 连接器,请在“API 连接器”下选择该 API 连接器,然后单击“上传新证书”。 Azure AD B2C 将自动使用最近上传的未过期且已超过开始日期的证书。

Providing a new certificate to an API connector when one already exists.

添加客户端证书策略密钥

  1. 登录 Azure 门户
  2. 如果有权访问多个租户,请选择顶部菜单中的“设置”图标,切换到“目录 + 订阅”菜单中的 Azure AD B2C 租户。
  3. 选择 Azure 门户左上角的“所有服务”,然后搜索并选择“Azure AD B2C” 。
  4. 在“概述”页上选择“标识体验框架”。
  5. 选择“策略密钥”,然后选择“添加” 。
  6. 在“选项”框中,选择“上传”。
  7. 在“名称”框中,键入 RestApiClientCertificate 。 前缀 B2C_1A_ 会自动添加。
  8. 在“文件上传”框中,选择包含私钥的证书 .pfx 文件。
  9. 在“密码”框中,键入证书的密码。
  10. 选择“创建”。

将 REST API 技术配置文件配置为使用客户端证书身份验证

创建所需的密钥后,配置 REST API 技术配置文件元数据来引用客户端证书。

  1. 在工作目录中,打开扩展策略文件 (TrustFrameworkExtensions.xml)。
  2. 搜索 REST API 技术配置文件, 例如 REST-ValidateProfileREST-GetProfile
  3. 找到 <Metadata> 元素。
  4. 将 AuthenticationType 更改为 ClientCertificate
  5. 将 AllowInsecureAuthInProduction 更改为 false
  6. 紧靠在 </Metadata> 元素右括号的后面添加以下 XML 片段:
    <CryptographicKeys>
       <Key Id="ClientCertificate" StorageReferenceId="B2C_1A_RestApiClientCertificate" />
    </CryptographicKeys>
    

以下 XML 代码片段是已配置 HTTP 客户端证书的 RESTful 技术配置文件示例:

<ClaimsProvider>
  <DisplayName>REST APIs</DisplayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="REST-GetProfile">
      <DisplayName>Get user extended profile Azure Function web hook</DisplayName>
      <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
      <Metadata>
        <Item Key="ServiceUrl">https://your-account.azurewebsites.net/api/GetProfile?code=your-code</Item>
        <Item Key="SendClaimsIn">Body</Item>
        <Item Key="AuthenticationType">ClientCertificate</Item>
        <Item Key="AllowInsecureAuthInProduction">false</Item>
      </Metadata>
      <CryptographicKeys>
        <Key Id="ClientCertificate" StorageReferenceId="B2C_1A_RestApiClientCertificate" />
      </CryptographicKeys>
      ...
    </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>

OAuth2 持有者身份验证

持有者令牌身份验证在 OAuth2.0 授权框架:持有者令牌用法 (RFC 6750) 中进行定义。 在持有者令牌身份验证中,Azure AD B2C 使用授权标头中的令牌发送 HTTP 请求。

Authorization: Bearer <token>

持有者令牌是一种不透明字符串。 它可以是 JWT 访问令牌,也可以是 REST API 要求 Azure AD B2C 在授权标头中发送的任何字符串。 Azure AD B2C 支持以下类型:

  • 持有者令牌。 为了能够在 Restful 技术配置文件中发送持有者令牌,策略需要先获取持有者令牌,然后在 Restful 技术配置文件中使用它。
  • 静态持有者令牌。 当 REST API 颁发长期访问令牌时使用此方法。 若要使用静态持有者令牌,请创建策略密钥,并从 RESTful 技术配置文件引用该策略密钥。

使用 OAuth2 持有者

以下步骤演示了如何使用客户端凭据来获取持有者令牌并将它传递到 REST API 调用的授权标头中。

定义声明以存储持有者令牌

声明在 Azure AD B2C 策略执行过程中提供数据的临时存储。 声明架构是发出声明的位置。 必须将访问令牌存储在声明中供稍后使用。

  1. 打开策略的扩展文件, 例如 SocialAndLocalAccounts/TrustFrameworkExtensions.xml
  2. 搜索 BuildingBlocks 元素。 如果该元素不存在,请添加该元素。
  3. 找到 ClaimsSchema 元素。 如果该元素不存在,请添加该元素。
  4. 将以下声明添加到 ClaimsSchema 元素。
<ClaimType Id="bearerToken">
  <DisplayName>Bearer token</DisplayName>
  <DataType>string</DataType>
</ClaimType>
<ClaimType Id="grant_type">
  <DisplayName>Grant type</DisplayName>
  <DataType>string</DataType>
</ClaimType>
<ClaimType Id="scope">
  <DisplayName>scope</DisplayName>
  <DataType>string</DataType>
</ClaimType>

获取访问令牌

可以通过以下几种方式之一:调用返回访问令牌的 REST API、使用 ROPC 流或使用客户端凭据流,为从联合标识提供者获取访问令牌。 客户端凭据流通常用于必须在后台运行的服务器间交互,不需要立即与用户交互。

获取 Microsoft Entra 访问令牌

下面的示例借助 REST API 技术配置文件,使用作为 HTTP 基本身份验证传递的客户端凭据向 Microsoft Entra 令牌终结点发出请求。 有关详细信息,请参阅 Microsoft 标识平台和 OAuth 2.0 客户端凭据流

你需要先注册应用程序,然后技术配置文件才能与 Microsoft Entra ID 进行交互来获取访问令牌。 Azure AD B2C 依赖于 Microsoft Entra 平台。 你可以在 Azure AD B2C 租户中或在你管理的任何 Microsoft Entra 租户中创建应用。 注册应用程序:

  1. 登录 Azure 门户
  2. 如果有权访问多个租户,请选择顶部菜单中的“设置”图标,切换到“目录 + 订阅”菜单中的 Azure AD B2C 租户。
  3. 在左侧菜单中,选择“Microsoft Entra ID”。 或者,选择“所有服务”,然后搜索“Microsoft Entra ID”并将其选中。
  4. 选择“应用注册”,然后选择“新建注册” 。
  5. 输入应用程序的“名称”。 例如 Client_Credentials_Auth_app。
  6. 在“支持的帐户类型”下,选择“仅此组织目录中的帐户” 。
  7. 选择“注册”。
  8. 记录“应用程序(客户端) ID”。

对于客户端凭据流,需要创建应用程序机密。 客户端密码也称为应用程序密码。 应用使用机密来获取访问令牌。

  1. 在“Microsoft Entra ID - 应用注册”页中,选择已创建的应用程序,例如 Client_Credentials_Auth_app。
  2. 在左侧菜单中“管理”下,选择“证书和机密”。
  3. 选择“新建客户端机密”。
  4. 在“说明”框中输入客户端机密的说明。 例如,clientsecret1
  5. 在“过期时间”下,选择机密持续生效的时间,然后选择“添加”。
  6. 记录密码的,以便在客户端应用程序代码中使用。 退出此页面后,此机密值永不再显示。 在应用程序的代码中将此值用作应用程序机密。

创建 Azure AD B2C 策略密钥

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

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

对于 ServiceUrl,将 your-tenant-name 替换为 Microsoft Entra 租户的名称。 有关所有可用选项,请参阅 RESTful 技术配置文件参考。

<TechnicalProfile Id="REST-AcquireAccessToken">
  <DisplayName></DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <Metadata>
    <Item Key="ServiceUrl">https://login.microsoftonline.com/your-tenant-name.onmicrosoft.com/oauth2/v2.0/token</Item>
    <Item Key="AuthenticationType">Basic</Item>
     <Item Key="SendClaimsIn">Form</Item>
  </Metadata>
  <CryptographicKeys>
    <Key Id="BasicAuthenticationUsername" StorageReferenceId="B2C_1A_SecureRESTClientId" />
    <Key Id="BasicAuthenticationPassword" StorageReferenceId="B2C_1A_SecureRESTClientSecret" />
  </CryptographicKeys>
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="grant_type" DefaultValue="client_credentials" AlwaysUseDefaultValue="true" />
    <InputClaim ClaimTypeReferenceId="scope" DefaultValue="https://graph.microsoft.com/.default" AlwaysUseDefaultValue="true" />
  </InputClaims>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="bearerToken" PartnerClaimType="access_token" />
  </OutputClaims>
  <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
</TechnicalProfile>

注意

如果在其他技术配置文件中使用 grant_typescope 声明,我们建议它们还指定 DefaultValue,并使用 AlwaysUseDefaultValue="true" 来避免在针对错误值使用的绑定中出现冲突。

将 REST 技术配置文件更改为使用持有者令牌身份验证

要在自定义策略中支持持有者令牌身份验证,请使用以下步骤修改 REST API 技术配置文件:

  1. 在工作目录中,打开 TrustFrameworkExtensions.xml 扩展策略文件。

  2. 搜索包含 Id="REST-API-SignUp"<TechnicalProfile> 节点。

  3. 找到 <Metadata> 元素。

  4. 将 AuthenticationType 更改为 Bearer,如下所示 :

    <Item Key="AuthenticationType">Bearer</Item>
    
  5. 将 UseClaimAsBearerToken 更改为 bearerToken 或添加此设置,如下所示 。 bearerToken 是从中检索持有者令牌的声明名称(来自 REST-AcquireAccessToken 的输出声明)。

    <Item Key="UseClaimAsBearerToken">bearerToken</Item>
    
  6. 将上一步骤中的声明添加为输入声明:

    <InputClaim ClaimTypeReferenceId="bearerToken"/>
    

更新策略后,技术配置文件应类似于以下 XML 代码:

<ClaimsProvider>
  <DisplayName>REST APIs</DisplayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="REST-GetProfile">
      <DisplayName>Get user extended profile Azure Function web hook</DisplayName>
      <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
      <Metadata>
        <Item Key="ServiceUrl">https://your-account.azurewebsites.net/api/GetProfile?code=your-code</Item>
        <Item Key="SendClaimsIn">Body</Item>
        <Item Key="AuthenticationType">Bearer</Item>
        <Item Key="UseClaimAsBearerToken">bearerToken</Item>
        <Item Key="AllowInsecureAuthInProduction">false</Item>
      </Metadata>
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="bearerToken"/>
      </InputClaims>
      ...
    </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>

调用 REST 技术配置文件

要调用 REST-GetProfile 技术配置文件,首先需要使用 REST-AcquireAccessToken 技术配置文件获取 Microsoft Entra 访问令牌。 以下示例演示如何从验证技术配置文件调用 REST-GetProfile 技术配置文件:

<ValidationTechnicalProfiles>
  <ValidationTechnicalProfile ReferenceId="REST-AcquireAccessToken" />
  <ValidationTechnicalProfile ReferenceId="REST-GetProfile" />
</ValidationTechnicalProfiles>

以下示例演示如何从用户旅程子旅程调用 REST-GetProfile 技术配置文件:

<OrchestrationSteps>
  <OrchestrationStep Order="2" Type="ClaimsExchange">
    <ClaimsExchanges>
      <ClaimsExchange Id="REST-AcquireAccessTokens" TechnicalProfileReferenceId="REST-AcquireAccessToken" />
    </ClaimsExchanges>
  </OrchestrationStep>

  <OrchestrationStep Order="3" Type="ClaimsExchange">
    <ClaimsExchanges>
      <ClaimsExchange Id="REST-GetProfile" TechnicalProfileReferenceId="REST-GetProfile" />
    </ClaimsExchanges>
  </OrchestrationStep>
</OrchestrationSteps>

使用静态 OAuth2 持有者

添加 OAuth2 持有者令牌策略密钥

若要为 REST API 技术配置文件配置 OAuth2 持有者令牌,请从 REST API 所有者获取访问令牌。 然后,创建以下加密密钥来存储持有者令牌。

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

将 REST API 技术配置文件配置为使用持有者令牌政策密钥

创建所需的密钥后,配置 REST API 技术配置文件元数据来引用持有者令牌。

  1. 在工作目录中,打开扩展策略文件 (TrustFrameworkExtensions.xml)。
  2. 搜索 REST API 技术配置文件, 例如 REST-ValidateProfileREST-GetProfile
  3. 找到 <Metadata> 元素。
  4. 将 AuthenticationType 更改为 Bearer
  5. 将 AllowInsecureAuthInProduction 更改为 false
  6. 紧靠在 </Metadata> 元素右括号的后面添加以下 XML 片段:
    <CryptographicKeys>
       <Key Id="BearerAuthenticationToken" StorageReferenceId="B2C_1A_RestApiBearerToken" />
    </CryptographicKeys>
    

以下 XML 代码片段是已配置持有者令牌身份验证的 RESTful 技术配置文件示例:

<ClaimsProvider>
  <DisplayName>REST APIs</DisplayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="REST-GetProfile">
      <DisplayName>Get user extended profile Azure Function web hook</DisplayName>
      <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
      <Metadata>
        <Item Key="ServiceUrl">https://your-account.azurewebsites.net/api/GetProfile?code=your-code</Item>
        <Item Key="SendClaimsIn">Body</Item>
        <Item Key="AuthenticationType">Bearer</Item>
        <Item Key="AllowInsecureAuthInProduction">false</Item>
      </Metadata>
      <CryptographicKeys>
        <Key Id="BearerAuthenticationToken" StorageReferenceId="B2C_1A_RestApiBearerToken" />
      </CryptographicKeys>
      ...
    </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>

将验证技术配置文件引用添加到调用 REST-AcquireAccessToken 的注册技术配置文件。 此行为意味着,只有在成功验证后,Azure AD B2C 才会继续在目录中创建帐户。

例如:

```XML
<ValidationTechnicalProfiles>
   ....
   <ValidationTechnicalProfile ReferenceId="REST-AcquireAccessToken" />
   ....
</ValidationTechnicalProfiles>

API 密钥身份验证

某些服务使用“API 密钥”机制,要求调用方包含一个唯一密钥作为 HTTP 头或 HTTP 查询参数,以模糊处理在开发过程中对 HTTP 端点的访问。 对于 Azure Functions,可以通过在 API 连接器的“终结点 URL”中将 code 添加为查询参数来实现此目的。 例如 https://contoso.azurewebsites.net/api/endpoint?code=0123456789

在生产环境中不应单独使用此机制。 因此,始终需要基本身份验证或证书身份验证的配置。 如果不希望出于开发目的实现任何身份验证方法(不建议),可以在 API 连接器配置中选择“基本”身份验证,并对 usernamepassword 使用临时值,API 在实现适当的授权时可忽略这些值。

API 密钥是用于对要访问 REST API 终结点的用户进行身份验证的唯一标识符。 该密钥是在自定义 HTTP 标头中发送的。 例如,Azure Functions HTTP 触发器使用 x-functions-key HTTP 标头来标识请求者。

添加 API 密钥策略密钥

要为 REST API 技术配置文件配置 API 密钥身份验证,请创建以下加密密钥来存储 API 密钥:

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

将 REST API 技术配置文件配置为使用 API 密钥身份验证

创建必要的密钥后,配置 REST API 技术配置文件元数据来引用凭据。

  1. 在工作目录中,打开扩展策略文件 (TrustFrameworkExtensions.xml)。
  2. 搜索 REST API 技术配置文件, 例如 REST-ValidateProfileREST-GetProfile
  3. 找到 <Metadata> 元素。
  4. 将 AuthenticationType 更改为 ApiKeyHeader
  5. 将 AllowInsecureAuthInProduction 更改为 false
  6. 紧靠在 </Metadata> 元素右括号的后面添加以下 XML 片段:
    <CryptographicKeys>
        <Key Id="x-functions-key" StorageReferenceId="B2C_1A_RestApiKey" />
    </CryptographicKeys>
    

加密密钥的 Id 定义 HTTP 标头。 在此示例中,API 密钥作为 x-functions-key 发送。

以下 XML 代码片段是已配置为通过 API 密钥身份验证调用 Azure 函数的 RESTful 技术配置文件示例:

<ClaimsProvider>
  <DisplayName>REST APIs</DisplayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="REST-GetProfile">
      <DisplayName>Get user extended profile Azure Function web hook</DisplayName>
      <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
      <Metadata>
        <Item Key="ServiceUrl">https://your-account.azurewebsites.net/api/GetProfile?code=your-code</Item>
        <Item Key="SendClaimsIn">Body</Item>
        <Item Key="AuthenticationType">ApiKeyHeader</Item>
        <Item Key="AllowInsecureAuthInProduction">false</Item>
      </Metadata>
      <CryptographicKeys>
        <Key Id="x-functions-key" StorageReferenceId="B2C_1A_RestApiKey" />
      </CryptographicKeys>
      ...
    </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>

后续步骤

  • 参考我们的示例帮助自己入门。