在 Azure AD 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 會在標頭中傳送具有用戶端認證 ( usernamepassword ) 的 Authorization HTTP 要求。

  • 認證會格式化為 base64 編碼的字串 username:password

  • 接著,您的 API 會負責檢查這些值以執行其他授權決策。

若要使用 HTTP 基本驗證設定 API 連線or,請遵循下列步驟:

  1. 登入 Azure 入口網站
  2. 在 [Azure 服務] 底 下,選取 [Azure AD B2C ],或搜尋並選取 [Azure AD B2C ]。
  3. 選取 [API 連接器 ],然後選取您要設定的 API 連線or
  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
  • 存留期 Acton 類型 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 命令來產生自我簽署憑證。 -Subject視您的應用程式和 Azure AD B2C 租使用者名稱,修改引數,例如 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 連線or

若要使用用戶端憑證驗證設定 API 連線or,請遵循下列步驟:

  1. 登入 Azure 入口網站
  2. 在 [Azure 服務 ] 底下 ,選取 [Azure AD B2C ]。
  3. 選取 [API 連接器 ],然後選取您要設定的 API 連線or
  4. 針對 [ 驗證類型 ],選取 [ 憑證 ]。
  5. 在 [ 上傳憑證 ] 方塊中,選取具有私密金鑰的憑證 .pfx 檔案。
  6. 在 [ 輸入密碼] 方塊中,輸入憑證的密碼。 Providing certificate authentication configuration for an API connector.
  7. 選取 [儲存]。

執行授權決策

您的 API 必須根據傳送的用戶端憑證來實作授權,才能保護 API 端點。 如需Azure App 服務和 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 Bearer

下列步驟示範如何使用用戶端認證來取得持有人權杖,並將它傳遞至 REST API 呼叫的 Authorization 標頭。

定義用來儲存持有人權杖的宣告

宣告會在 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. 記錄應用程式 (用戶端) 識別碼

針對用戶端認證流程,您必須建立應用程式密碼。 用戶端密碼也稱為應用程式密碼。 您的應用程式會使用秘密來取得存取權杖。

  1. 在 [ Microsoft Entra ID - 應用程式註冊] 頁面中,選取您建立的應用程式,例如 Client_Credentials_Auth_app
  2. 在左側功能表中,於 [管理] 下,選取 [憑證和祕密]
  3. 選取 [新用戶端密碼]
  4. 在 [描述 ] 方塊中 輸入用戶端密碼的描述。 例如, clientsecret1
  5. 在 [到期] 下,選取祕密的有效持續時間,然後選取 [新增]
  6. 記錄秘密的值 ,以用於用戶端應用程式程式碼。 離開此頁面後,就「不會再次顯示」此祕密值。 您可以使用此值作為應用程式程式碼中的應用程式密碼。

建立 Azure AD B2C 原則金鑰

您必須儲存您先前在 Azure AD B2C 租使用者中記錄的用戶端識別碼和用戶端密碼值。

  1. 登入 Azure 入口網站
  2. 如果您有多個租使用者的存取權,請選取 頂端功能表中的 [設定 ] 圖示,從 [目錄 + 訂 用帳戶] 功能表切換至您的 Azure AD B2C 租使用者。
  3. 選擇 Azure 入口網站左上角的 [所有服務 ],然後搜尋並選取 [Azure AD B2C ]。
  4. 在 [概觀] 頁面上,選取 [ 身分識別體驗架構 ]。
  5. 選取 [ 原則金鑰 ],然後選取 [ 新增 ]。
  6. 針對 [ 選項 ],選擇 Manual
  7. 輸入 原則金鑰 SecureRESTClientId 的 [名稱 ] 。 前置詞 B2C_1A_ 會自動新增至金鑰的名稱。
  8. 在 [秘密 ] 中 ,輸入您先前記錄的用戶端識別碼。
  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 持有人權杖原則金鑰

若要使用 OAuth2 持有人權杖設定 REST API 技術設定檔,請從 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 ,您可以藉由在 code API 連接器的端點 URL 中包含 作為查詢參數來完成這項作業。 例如, https://contoso.azurewebsites.net/api/endpoint?code=0123456789

這不是應該單獨在生產環境中使用的機制。 因此,一律需要基本或憑證驗證的設定。 如果您不想針對開發目的實作任何驗證方法(不建議),您可以在 API 連接器組態中選取「基本」驗證,並針對 使用暫存值 usernamepassword ,而且您的 API 可以在實作適當的授權時忽略。

API 金鑰是用來驗證使用者以存取 REST API 端點的唯一識別碼。 金鑰會在自訂 HTTP 標頭中傳送。 例如, Azure Functions HTTP 觸發程式 會使用 x-functions-key HTTP 標頭來識別要求者。

新增 API 金鑰原則金鑰

若要使用 API 金鑰驗證設定 REST 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>
    

密碼 編譯金鑰的識別碼 會定義 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>

下一步