這很重要
自 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 會在標頭中傳送具有客戶端認證 (
username和password) 的AuthorizationHTTP 要求。該認證會格式化為 base64 編碼的字串 (
username:password)。您的 API 即會負責檢查這些值,以執行其他授權決策。
若要使用 HTTP 基本驗證來設定 API 連接器,請遵循下列步驟:
- 登入 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]。
- 在 [概觀] 頁面上,選取 [ 身分識別體驗架構]。
- 選取 [原則金鑰],然後選取 [新增]。
- 針對 [選項],選取 [ 手動]。
- 針對 [名稱],輸入 RestApiUsername。 可能會自動新增前置 詞B2C_1A_ 。
- 在 [ 秘密 ] 方塊中,輸入 REST API 用戶名稱。
- 針對 [ 金鑰使用方式],選取 [ 加密]。
- 選取 ,創建。
- 再次選取 [原則密鑰 ]。
- 選取 ,然後新增。
- 針對 [選項],選取 [ 手動]。
- 在 [名稱] 中,輸入 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 Key Vault (建議)
若要建立憑證,您可以使用 Azure Key Vault,其具有自我簽署憑證的選項,並與已簽署憑證的憑證簽發者提供者整合。 建議設定包括:
-
主旨:
CN=<yourapiname>.<tenantname>.onmicrosoft.com -
內容類型:
PKCS #12 -
存留期 Acton 類型:
Email all contacts at a given percentage lifetime或Email all contacts a given number of days before expiry -
鍵類型:
RSA -
密鑰大小:
2048 -
可匯出的私密金鑰:
Yes(為了能夠匯出.pfx檔案)
然後,您可以 匯出憑證。
選項 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 App Service 和 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 Bearer
下列步驟示範如何使用客戶端認證來取得持有人令牌,並將它傳遞至 REST API 呼叫的 Authorization 標頭。
定義用來儲存持有人令牌的宣告
宣告會在 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。
- 在 支援的帳戶類型下,選取 僅限此組織目錄中的帳戶。
- 選取 註冊。
- 記錄 應用程式 (用戶端) 識別碼。
針對客戶端認證流程,您必須建立應用程式密碼。 用戶端密碼也稱為應用程式密碼。 您的應用程式會使用秘密來取得存取令牌。
- 在 [Microsoft Entra ID - 應用程式註冊 ] 頁面中,選取您建立的應用程式,例如 Client_Credentials_Auth_app。
- 在左側功能表中,於 [管理] 下,選取 [憑證 & 秘密]。
- 選取 [新用戶端密碼]。
- 在 [描述] 方塊中輸入客戶端密碼的描述。 例如,clientsecret1。
- 在 [到期] 下,選取祕密的有效持續時間,然後選取 [新增]。
- 記錄密碼的值,以便在用戶端應用程式的程式碼中使用。 離開此頁面後,就「不會再次顯示」此祕密值。 您可以使用此值,作為應用程式程式碼中的應用程式密碼。
建立 Azure AD B2C 原則金鑰
您必須儲存您先前在 Azure AD B2C 租用戶中記錄的用戶端識別碼和客戶端密碼值。
- 登入 Azure 入口網站。
- 如果您有多個租用戶的存取權,請使用頂端功能表中的 [設定] 圖示,從 [目錄 + 訂用帳戶] 功能表切換至您的 Azure AD B2C 租用戶。
- 選擇 Azure 入口網站左上角 的 [所有服務 ],然後搜尋並選取 [Azure AD B2C]。
- 在 [概觀] 頁面上,選取 [ 身分識別體驗架構]。
- 選取 [原則密鑰 ],然後選取 [ 新增]。
- 針對 [選項],選擇
Manual。 - 輸入名稱以作為政策金鑰
SecureRESTClientId。 前置詞B2C_1A_會自動新增至金鑰的名稱。 - 在 [ 秘密] 中,輸入您先前記錄的用戶端識別符。
- 針對 [ 金鑰使用方式],選取
Signature。 - 選取 ,創建。
- 使用下列設定建立另一個原則金鑰:
-
名稱:
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 擴展策略檔。
搜尋包含
<TechnicalProfile>的Id="REST-API-SignUp"節點。找到
<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_會自動新增至金鑰的名稱。 - 在 [ 秘密] 中,輸入您先前記錄的客戶端密碼。
- 針對 [ 金鑰使用方式],選取
Encryption。 - 選取 ,創建。
設定 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 連接器的code 中包含 作為查詢參數,以完成這項操作。 例如,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 金鑰:
- 登入 Azure 入口網站。
- 如果您有多個租用戶的存取權,請使用頂端功能表中的 [設定] 圖示,從 [目錄 + 訂用帳戶] 功能表切換至您的 Azure AD B2C 租用戶。
- 選擇 Azure 入口網站左上角 的 [所有服務 ],然後搜尋並選取 [Azure AD B2C]。
- 在 [概觀] 頁面上,選取 [ 身分識別體驗架構]。
- 選取 [原則金鑰],然後選取 [新增]。
- 針對 [選項],選取 [ 手動]。
- 針對 [名稱],輸入 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>
密碼編譯金鑰的 識別碼 會定義 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>
相關內容
- 開始使用我們的 範例。
- 在自定義原則參考中進一步瞭解 RESTful 技術設定檔 元素。