您可以使用 App Check 保護應用的非 Firebase 資源,例如自託管後端。為此,您需要執行以下兩項操作:
- 修改您的應用程序客戶端以將 App Check 令牌與每個請求一起發送到您的後端,如本頁所述。
- 修改您的後端以在每個請求中都需要有效的 App Check 令牌,如從自定義後端驗證 App Check 令牌中所述。
在你開始之前
使用reCAPTCHA v3 提供程序、 reCAPTCHA Enterprise 提供程序或自定義提供程序,將 App Check 添加到您的應用程序。
使用後端請求發送 App Check 令牌
在您的應用程序客戶端中,在每個請求之前,使用appCheck().getToken()
獲取一個有效的、未過期的 App Check 令牌。 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);