您可以透過 App Check 保護應用程式的非 Google 自訂後端資源,例如自行管理的後端。如要這麼做,請完成下列兩項操作:
- 修改您的應用程式用戶端,使其在每個向後端發送的請求中都包含一個 App Check 令牌,如本頁所述。
- 按照「從自訂後端驗證 App Check 權杖」一文所述,修改後端,要求每項要求都必須附上有效的 App Check 權杖。
事前準備
使用 reCAPTCHA Enterprise 提供者 或 自訂提供者,將 App Check 加入您的應用程式。
透過後端要求傳送 App Check 權杖
在您的應用程式用戶端中,在每次請求之前,使用 appCheck().getToken() 取得有效的、未過期的 App Check 令牌。App Check 程式庫會視需要重新整理權杖。
取得有效權杖後,請連同要求傳送至後端。具體做法由您決定,但請勿在網址中傳送 App Check 權杖 (包括查詢參數),否則權杖可能會意外洩漏或遭到攔截。以下範例透過自訂 HTTP 標頭傳送令牌,這是推薦的方法。
Web
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
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. };
重送攻擊防護機制 (Beta 版)
向已啟用重播保護機制的端點提出要求時,請使用 getLimitedUseToken() 取得權杖,而非 getToken():
import { getLimitedUseToken } from "firebase/app-check";
// ...
appCheckTokenResponse = await getLimitedUseToken(appCheck);