您可以使用 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 version 9
const { initializeAppCheck, getToken } = require('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 version 8
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. };