重要
自 2025 年 5 月 1 日起,Azure AD B2C 将不再可供新客户购买。 在我们的常见问题解答中了解详细信息。
在 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
客户端凭据(username
和password
)发送 HTTP 请求。凭据的格式是 base64 编码的字符串
username:password
。然后,API 负责检查这些值以执行其他授权决策。
若要为 API 连接器配置 HTTP 基本身份验证,请执行下列步骤:
- 登录到 Azure 门户。
- 在 Azure 服务下,选择 Azure AD B2C 或搜索并选择 Azure AD B2C。
- 选择 API 连接器,然后选择要配置的 API 连接器 。
- 对于“身份验证类型”,请选择“基本”。
- 提供 REST API 终结点的“用户名”和“密码”。
- 选择“保存”。
添加 REST API 用户名和密码策略密钥
若要配置具有 HTTP 基本身份验证的 REST API 技术配置文件,请创建以下加密密钥来存储用户名和密码:
- 登录到 Azure 门户。
- 如果有权访问多个租户,请选择顶部菜单中的“设置”图标,从“目录 + 订阅”菜单切换到你的 Azure AD B2C 租户。
- 选择 Azure 门户左上角的“所有服务”,然后搜索并选择“Azure AD B2C” 。
- 在“概述”页上选择“标识体验框架”。
- 选择“策略密钥”,然后选择“添加”。
- 对于 “选项”,请选择“ 手动”。
- 对于 Name,请键入 RestApiUsername。 可能会自动添加 前缀B2C_1A_ 。
- 在 “机密 ”框中,输入 REST API 用户名。
- 对于 密钥使用情况,请选择“ 加密”。
- 选择 创建。
- 再次选择 策略密钥 。
- 选择 并添加。
- 对于 “选项”,请选择“ 手动”。
- 对于 Name,请键入 RestApiPassword。 可能会自动添加 前缀B2C_1A_ 。
- 在 “机密 ”框中,输入 REST API 密码。
- 对于 密钥使用情况,请选择“ 加密”。
- 选择 创建。
将 REST API 技术配置文件配置为使用 HTTP 基本身份验证
创建所需的密钥后,配置 REST API 技术配置文件元数据来引用凭据。
- 在工作目录中,打开扩展策略文件(TrustFrameworkExtensions.xml)。
- 搜索 REST API 技术配置文件。 例如
REST-ValidateProfile
或REST-GetProfile
。 - 找到
<Metadata>
元素。 - 将 AuthenticationType 更改为
Basic
. - 将 AllowInsecureAuthInProduction 更改为
false
. - 紧接在结束
</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 数字证书。
重要
在生产环境中,证书必须由证书颁发机构进行签名。
创建证书
选项 1:使用 Azure 密钥保管库(建议)
若要创建证书,可以使用 Azure 密钥保管库,其中提供了适用于自签名证书的选项,以及与证书颁发者提供程序相集成以便为证书签名的选项。 建议的设置包括:
- 主题:
CN=<yourapiname>.<tenantname>.onmicrosoft.com
- 内容类型:
PKCS #12
- 生存期操作类型:
Email all contacts at a given percentage lifetime
或Email all contacts a given number of days before expiry
- 密钥类型:
RSA
- 密钥大小:
2048
- 可导出的私钥:(以便能够导出
Yes
文件)
然后,你可以导出该证书。
选项 2:使用 PowerShell 模块准备自签名证书
如果你还没有证书,则可以使用自签名证书。 自签名证书是未由证书颁发机构 (CA) 签署的安全证书,不提供由 CA 签名的证书的安全保障。
在 Windows 上,可在 PowerShell 中使用 New-SelfSignedCertificate cmdlet 来生成证书。
运行以下 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"
在 Windows 计算机上,搜索并选择“管理用户证书”
在“证书 - 当前用户”下,选择“个人”“证书”“yourappname.yourtenant.onmicrosoft.com” 。
选择该证书,然后依次选择“操作”“所有任务”>“导出”。
选择“下一步”“是,导出私钥”>“下一步” 。
接受“导出文件格式”的默认值,然后选择“下一步” 。
启用“密码”选项,输入证书的密码,然后选择“下一步” 。
若要指定保存证书的位置,请选择“浏览”并导航到所选的目录。
在“另存为”窗口中,输入文件名,然后选择“保存” 。
选择“下一步”>“完成”。
要让 Azure AD B2C 接受 .pfx 文件密码,必须在 Windows 证书存储导出实用工具中使用 TripleDES-SHA1 选项,而不是 AES256-SHA256 对此密码进行加密。
配置 API 连接器
若要为 API 连接器配置客户端证书身份验证,请执行下列步骤:
- 登录到 Azure 门户。
- 在“Azure 服务”下,选择“Azure AD B2C”。
- 选择 API 连接器,然后选择要配置的 API 连接器 。
- 对于“身份验证类型”,请选择“证书”。
- 在“上传证书”框中,选择包含私钥的证书 .pfx 文件。
- 在“输入密码”框中,键入证书的密码。
- 选择“保存”。
执行授权决策
API 必须根据发送的客户端证书实现授权,以便保护 API 终结点。 对于 Azure 应用服务和 Azure Functions,请参阅配置 TLS 相互身份验证来了解如何通过 API 代码启用和验证证书。 也可以将 Azure API 管理用作任何 API 服务前面的层,以根据所需值检查客户端证书属性。
续订证书
建议为证书过期的时间设置提醒警报。 需要生成新的证书,并在使用过的证书即将过期时重复上述步骤。 为了“滚动”使用新证书,API 服务可以在部署新证书期间继续暂时接受新旧证书。
若要将新证书上传到现有 API 连接器,请选择 API 连接器下的 API 连接器 ,然后单击“ 上传新证书”。 最近上传的证书(未过期且其开始日期已通过)将自动由 Azure AD B2C 使用。
添加客户端证书策略密钥
- 登录到 Azure 门户。
- 如果有权访问多个租户,请选择顶部菜单中的“设置”图标,从“目录 + 订阅”菜单切换到你的 Azure AD B2C 租户。
- 选择 Azure 门户左上角的“所有服务”,然后搜索并选择“Azure AD B2C” 。
- 在“概述”页上选择“标识体验框架”。
- 选择“策略密钥”,然后选择“添加”。
- 在 “选项 ”框中,选择“ 上传”。
- 在 “名称 ”框中,键入 RestApiClientCertificate。 会自动添加前缀 B2C_1A_ 。
- 在 “文件上传 ”框中,选择具有私钥的证书的 .pfx 文件。
- 在 “密码 ”框中,键入证书的密码。
- 选择 创建。
将 REST API 技术配置文件配置为使用客户端证书身份验证
创建必要的密钥后,配置 REST API 技术配置文件元数据以引用客户端证书。
- 在工作目录中,打开扩展策略文件(TrustFrameworkExtensions.xml)。
- 搜索 REST API 技术配置文件。 例如
REST-ValidateProfile
或REST-GetProfile
。 - 找到
<Metadata>
元素。 - 将 AuthenticationType 更改为
ClientCertificate
. - 将 AllowInsecureAuthInProduction 更改为
false
. - 紧接在结束
</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 策略执行过程中提供数据的临时存储。 声明架构是您声明内容的地方。 访问令牌必须存储在声明里以供后用。
- 打开策略的扩展文件。 例如,
SocialAndLocalAccounts/
TrustFrameworkExtensions.xml
。 - 搜索 BuildingBlocks 元素。 如果该元素不存在,请添加该元素。
- 找到 ClaimsSchema 元素。 如果该元素不存在,请添加该元素。
- 将以下声明添加到 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 建议不要使用 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 租户中创建应用。 注册应用程序:
- 登录到 Azure 门户。
- 如果有权访问多个租户,请选择顶部菜单中的“设置”图标,从“目录 + 订阅”菜单切换到你的 Azure AD B2C 租户。
- 在左侧菜单中,选择“Microsoft Entra ID”。 或者,选择 “所有服务 ”,然后搜索并选择 Microsoft Entra ID。
- 选择“应用注册”,然后选择“新建注册”。
- 输入应用程序的“名称”。 例如, Client_Credentials_Auth_app。
- 在“支持的帐户类型”下,选择“仅此组织目录中的帐户”。
- 选择“注册”。
- 记录 应用程序(客户端)ID。
对于客户端凭据流,需要创建应用程序机密。 客户端密码也称为应用程序密码。 应用程序使用机密来获取访问令牌。
- 在 “Microsoft Entra ID - 应用注册 ”页中,选择创建的应用程序,例如 Client_Credentials_Auth_app。
- 在左侧菜单中的“管理”下,选择“证书和机密”。
- 选择 新客户端密码。
- 在“说明”框中输入客户端密码的说明。 例如,clientsecret1。
- 在“过期时间”下,选择机密持续生效的时间,然后选择“添加”。
- 记录密码的值,以便在客户端应用程序代码中使用。 退出此页面后,此机密值永不再显示。 在应用程序的代码中将此值用作应用程序机密。
创建 Azure AD B2C 策略密钥
需要存储以前在 Azure AD B2C 租户中记录的客户端 ID 和客户端机密值。
- 登录到 Azure 门户。
- 如果有权访问多个租户,请选择顶部菜单中的“设置”图标,从“目录 + 订阅”菜单切换到你的 Azure AD B2C 租户。
- 选择 Azure 门户左上角的“所有服务”,然后搜索并选择“Azure AD B2C” 。
- 在“概述”页上选择“标识体验框架”。
- 选择“策略密钥”,然后选择“添加”。
- 对于“选项”,选择 。
Manual
- 输入策略密钥
SecureRESTClientId
的名称。 前缀B2C_1A_
会自动添加到密钥名称。 - 在 机密中,输入之前记录的客户端 ID。
- 在“密钥用法”处选择 。
- 选择 创建。
- 使用以下设置创建另一个策略密钥:
- 名称:
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_type
或 scope
声明,我们建议它们还指定 DefaultValue
,并使用 AlwaysUseDefaultValue="true"
来避免在针对错误值使用的绑定中出现冲突。
更改 REST 技术配置文件以使用持有者令牌身份验证
若要在自定义策略中支持持有者令牌身份验证,请使用以下步骤修改 REST API 技术配置文件:
在您的工作目录中,打开 TrustFrameworkExtensions.xml 扩展策略文件。
搜索包含
Id="REST-API-SignUp"
的<TechnicalProfile>
节点。找到
<Metadata>
元素。将 AuthenticationType 更改为 Bearer,如下所示:
<Item Key="AuthenticationType">Bearer</Item>
更改或添加 UseClaimAsBearerToken 到 bearerToken,如下所示。 bearerToken 是从中检索持有者令牌的声明名称(来自
REST-AcquireAccessToken
的输出声明)。<Item Key="UseClaimAsBearerToken">bearerToken</Item>
将上一步骤中的声明添加为输入声明:
<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 持有者令牌策略密钥
若要使用 OAuth2 持有者令牌配置 REST API 技术配置文件,请从 REST API 所有者获取访问令牌。 然后创建以下加密密钥来存储持有者令牌。
- 登录到 Azure 门户。
- 如果有权访问多个租户,请选择顶部菜单中的“设置”图标,从“目录 + 订阅”菜单切换到你的 Azure AD B2C 租户。
- 选择 Azure 门户左上角的“所有服务”,然后搜索并选择“Azure AD B2C” 。
- 在“概述”页上选择“标识体验框架”。
- 选择“策略密钥”,然后选择“添加”。
- 对于“选项”,选择 。
Manual
- 输入策略密钥的名称。 例如,
RestApiBearerToken
。 前缀B2C_1A_
会自动添加到密钥名称。 - 在 “机密”中,输入之前记录的客户端密码。
- 在“密钥用法”处选择 。
- 选择 创建。
将 REST API 技术配置文件配置为使用持有者令牌政策密钥
创建所需的密钥后,配置 REST API 技术配置文件元数据来引用持有者令牌。
- 在工作目录中,打开扩展策略文件(TrustFrameworkExtensions.xml)。
- 搜索 REST API 技术配置文件。 例如
REST-ValidateProfile
或REST-GetProfile
。 - 找到
<Metadata>
元素。 - 将 AuthenticationType 更改为
Bearer
. - 将 AllowInsecureAuthInProduction 更改为
false
. - 紧接在结束
</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 连接器配置中选择“基本”身份验证,并为其username
password
使用临时值,并且 API 在实现适当的授权时可以忽略。
API 密钥是用于对用户访问 REST API 终结点进行身份验证的唯一标识符。 密钥在自定义 HTTP 标头中发送。 例如, Azure Functions HTTP 触发器 使用 x-functions-key
HTTP 标头来标识请求者。
添加 API 密钥策略密钥
若要使用 API 密钥身份验证配置 REST API 技术配置文件,请创建以下加密密钥来存储 API 密钥:
- 登录到 Azure 门户。
- 如果有权访问多个租户,请选择顶部菜单中的“设置”图标,从“目录 + 订阅”菜单切换到你的 Azure AD B2C 租户。
- 选择 Azure 门户左上角的“所有服务”,然后搜索并选择“Azure AD B2C” 。
- 在“概述”页上选择“标识体验框架”。
- 选择“策略密钥”,然后选择“添加”。
- 对于 “选项”,请选择“ 手动”。
- 对于 Name,请键入 RestApiKey。 可能会自动添加 前缀B2C_1A_ 。
- 在 “机密 ”框中,输入 REST API 密钥。
- 对于 密钥使用情况,请选择“ 加密”。
- 选择 创建。
将 REST API 技术配置文件配置为使用 API 密钥身份验证
创建必要的密钥后,配置 REST API 技术配置文件元数据来引用凭据。
- 在工作目录中,打开扩展策略文件(TrustFrameworkExtensions.xml)。
- 搜索 REST API 技术配置文件。 例如
REST-ValidateProfile
或REST-GetProfile
。 - 找到
<Metadata>
元素。 - 将 AuthenticationType 更改为
ApiKeyHeader
. - 将 AllowInsecureAuthInProduction 更改为
false
. - 紧接在结束
</Metadata>
元素之后,添加以下 XML 代码片段:<CryptographicKeys> <Key Id="x-functions-key" StorageReferenceId="B2C_1A_RestApiKey" /> </CryptographicKeys>
加密密钥的 ID 定义 HTTP 标头。 在此示例中,API 密钥作为 x-functions-key 发送。
以下 XML 代码片段是一个 RESTful 技术配置文件示例,该配置文件配置为使用 API 密钥身份验证调用 Azure 函数:
<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>
相关内容
- 开始使用我们的示例。
- 详细了解自定义策略参考中的 RESTful 技术配置文件元素。