您可以使用 App Check 保護應用的非 Firebase 資源,例如自託管後端。為此,您需要執行以下兩項操作:
- 修改您的應用程序客戶端,將應用程序檢查令牌與每個請求一起發送到您的後端,如本頁所述。
- 修改您的後端,使每個請求都需要有效的應用程序檢查令牌,如從自定義後端驗證應用程序檢查令牌中所述。
在你開始之前
使用reCAPTCHA Enterprise 提供程序或自定義提供程序將 App Check 添加到您的應用程序。
通過後端請求發送 App Check 令牌
在您的應用程序客戶端中,在每個請求之前,使用appCheck().getToken()
獲取有效的、未過期的應用程序檢查令牌。如果需要,App Check 庫將刷新令牌。
獲得有效令牌後,將其與請求一起發送到後端。如何完成此操作的具體細節取決於您,但不要將 App Check 令牌作為 URL 的一部分發送,包括在查詢參數中,因為這會使它們容易受到意外洩漏和攔截。以下示例在自定義 HTTP 標頭中發送令牌,這是推薦的方法。
Web modular API
import { initializeAppCheck, getToken } from 'firebase/app-check'; const appCheck = initializeAppCheck( app, { provider: provider } // ReCaptchaV3Provider or CustomProvider ); const callApiWithAppCheckExample = async () => { let appCheckTokenResponse; try { appCheckTokenResponse = await getToken(appCheck, /* forceRefresh= */ false); } catch (err) { // Handle any errors if the token was not retrieved. return; } // Include the App Check token with requests to your server. const apiResponse = await fetch('https://yourbackend.example.com/yourApiEndpoint', { headers: { 'X-Firebase-AppCheck': appCheckTokenResponse.token, } }); // Handle response from your backend. };
Web namespaced API
const callApiWithAppCheckExample = async () => { let appCheckTokenResponse; try { appCheckTokenResponse = await firebase.appCheck().getToken(/* forceRefresh= */ false); } catch (err) { // Handle any errors if the token was not retrieved. return; } // Include the App Check token with requests to your server. const apiResponse = await fetch('https://yourbackend.example.com/yourApiEndpoint', { headers: { 'X-Firebase-AppCheck': appCheckTokenResponse.token, } }); // Handle response from your backend. };
重放保護(測試版)
當向已啟用重放保護的端點發出請求時,請使用getLimitedUseToken()
而不是getToken()
獲取令牌:
import { getLimitedUseToken } from "firebase/app-check";
// ...
appCheckTokenResponse = await getLimitedUseToken(appCheck);