הגנה על משאבי קצה עורפי בהתאמה אישית באמצעות App Check ב-Android
קל לארגן דפים בעזרת אוספים
אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.
אתם יכולים להשתמש ב-App Check כדי להגן על משאבי קצה עורפי בהתאמה אישית שאינם של Google באפליקציה שלכם, כמו קצה עורפי שמתארח באופן עצמאי. כדי לעשות זאת, תצטרכו לבצע את שתי הפעולות הבאות:
לפני שמתחילים
מוסיפים את App Check לאפליקציה באמצעות ספק ברירת המחדל של Play Integrity או ספק בהתאמה אישית.
שליחת טוקנים של App Check עם בקשות backend
כדי לוודא שהבקשות לשרת העורפי כוללות טוקן App Check תקין שלא פג תוקפו, צריך לעטוף כל בקשה בקריאה ל-getAppCheckToken()
. הספרייה App Check תרענן את הטוקן אם יהיה צורך בכך, ותוכלו לגשת לטוקן ב-listener של השיטה להצלחה.
אחרי שיהיה לכם אסימון תקין, תצטרכו לשלוח אותו עם הבקשה לשרת העורפי. הפרטים הספציפיים של האופן שבו מבצעים את הפעולה הזו תלויים בכם, אבל אל תשלחו טוקנים של App Check כחלק מכתובות URL, כולל בפרמטרים של שאילתות, כי זה הופך אותם לפגיעים לדליפה וליירוט מקריים. הגישה המומלצת היא לשלוח את האסימון בכותרת HTTP מותאמת אישית.
לדוגמה, אם משתמשים ב-Retrofit:
Kotlin
class ApiWithAppCheckExample {
interface YourExampleBackendService {
@GET("yourExampleEndpoint")
fun exampleData(
@Header("X-Firebase-AppCheck") appCheckToken: String,
): Call<List<String>>
}
var yourExampleBackendService: YourExampleBackendService = Retrofit.Builder()
.baseUrl("https://yourbackend.example.com/")
.build()
.create(YourExampleBackendService::class.java)
fun callApiExample() {
Firebase.appCheck.getAppCheckToken(false).addOnSuccessListener { appCheckToken ->
val token = appCheckToken.token
val apiCall = yourExampleBackendService.exampleData(token)
// ...
}
}
}
Java
public class ApiWithAppCheckExample {
private interface YourExampleBackendService {
@GET("yourExampleEndpoint")
Call<List<String>> exampleData(
@Header("X-Firebase-AppCheck") String appCheckToken);
}
YourExampleBackendService yourExampleBackendService = new Retrofit.Builder()
.baseUrl("https://yourbackend.example.com/")
.build()
.create(YourExampleBackendService.class);
public void callApiExample() {
FirebaseAppCheck.getInstance()
.getAppCheckToken(false)
.addOnSuccessListener(new OnSuccessListener<AppCheckToken>() {
@Override
public void onSuccess(@NonNull AppCheckToken appCheckToken) {
String token = appCheckToken.getToken();
Call<List<String>> apiCall =
yourExampleBackendService.exampleData(token);
// ...
}
});
}
}
הגנה מפני הפעלה חוזרת (בטא)
כששולחים בקשה לנקודת קצה שהפעלתם עבורה הגנה מפני הפעלה חוזרת, צריך לעטוף את הבקשה בקריאה ל-getLimitedUseAppCheckToken()
במקום ל-getAppCheckToken()
:
Kotlin
Firebase.appCheck.limitedUseAppCheckToken.addOnSuccessListener {
// ...
}
Java
FirebaseAppCheck.getInstance()
.getLimitedUseAppCheckToken().addOnSuccessListener(
new OnSuccessListener<AppCheckToken>() {
@Override
public void onSuccess(AppCheckToken appCheckToken) {
String token = appCheckToken.getToken();
// ...
}
}
);
אלא אם צוין אחרת, התוכן של דף זה הוא ברישיון Creative Commons Attribution 4.0 ודוגמאות הקוד הן ברישיון Apache 2.0. לפרטים, ניתן לעיין במדיניות האתר Google Developers. Java הוא סימן מסחרי רשום של חברת Oracle ו/או של השותפים העצמאיים שלה.
עדכון אחרון: 2025-08-23 (שעון UTC).
[null,null,["עדכון אחרון: 2025-08-23 (שעון UTC)."],[],[],null,["You can use App Check to protect non-Google custom backend resources for\nyour app, like your own self-hosted backend. To do so, you'll need to do both of\nthe following:\n\n- Modify your app client to send an App Check token along with each request to your backend, as described on this page.\n- Modify your backend to require a valid App Check token with every request, as described in [Verify App Check tokens from a custom backend](/docs/app-check/custom-resource-backend).\n\nBefore you begin\n\nAdd App Check to your app, using either the default\n[Play Integrity provider](/docs/app-check/android/play-integrity-provider), or a\n[custom provider](/docs/app-check/android/custom-provider).\n\nSend App Check tokens with backend requests\n\nTo ensure your backend requests include a valid, unexpired, App Check token,\nwrap each request in a call to `getAppCheckToken()`. The App Check library\nwill refresh the token if necessary, and you can access the token in the\nmethod's success listener.\n\nOnce you have a valid token, send it along with the request to your backend. The\nspecifics of how you accomplish this are up to you, but *don't send\nApp Check tokens as part of URLs*, including in query parameters, as this\nmakes them vulnerable to accidental leakage and interception. The recommended\napproach is to send the token in a custom HTTP header.\n\nFor example, if you use Retrofit: \n\nKotlin \n\n```kotlin\nclass ApiWithAppCheckExample {\n interface YourExampleBackendService {\n @GET(\"yourExampleEndpoint\")\n fun exampleData(\n @Header(\"X-Firebase-AppCheck\") appCheckToken: String,\n ): Call\u003cList\u003cString\u003e\u003e\n }\n\n var yourExampleBackendService: YourExampleBackendService = Retrofit.Builder()\n .baseUrl(\"https://yourbackend.example.com/\")\n .build()\n .create(YourExampleBackendService::class.java)\n\n fun callApiExample() {\n Firebase.appCheck.getAppCheckToken(false).addOnSuccessListener { appCheckToken -\u003e\n val token = appCheckToken.token\n val apiCall = yourExampleBackendService.exampleData(token)\n // ...\n }\n }\n}https://github.com/firebase/snippets-android/blob/391c1646eacf44d2aab3f76bcfa60dfc6c14acf1/appcheck/app/src/main/java/com/google/firebase/example/appcheck/kotlin/ApiWithAppCheckExample.kt#L11-L31\n```\n\nJava \n\n```java\npublic class ApiWithAppCheckExample {\n private interface YourExampleBackendService {\n @GET(\"yourExampleEndpoint\")\n Call\u003cList\u003cString\u003e\u003e exampleData(\n @Header(\"X-Firebase-AppCheck\") String appCheckToken);\n }\n\n YourExampleBackendService yourExampleBackendService = new Retrofit.Builder()\n .baseUrl(\"https://yourbackend.example.com/\")\n .build()\n .create(YourExampleBackendService.class);\n\n public void callApiExample() {\n FirebaseAppCheck.getInstance()\n .getAppCheckToken(false)\n .addOnSuccessListener(new OnSuccessListener\u003cAppCheckToken\u003e() {\n @Override\n public void onSuccess(@NonNull AppCheckToken appCheckToken) {\n String token = appCheckToken.getToken();\n Call\u003cList\u003cString\u003e\u003e apiCall =\n yourExampleBackendService.exampleData(token);\n // ...\n }\n });\n }\n}https://github.com/firebase/snippets-android/blob/391c1646eacf44d2aab3f76bcfa60dfc6c14acf1/appcheck/app/src/main/java/com/google/firebase/example/appcheck/ApiWithAppCheckExample.java#L18-L43\n```\n\nReplay protection (beta)\n\nWhen making a request to an endpoint for which you've enabled\n[replay protection](/docs/app-check/custom-resource-backend#replay-protection),\nwrap the request in a call to `getLimitedUseAppCheckToken()` instead of\n`getAppCheckToken()`: \n\nKotlin \n\n```kotlin\nFirebase.appCheck.limitedUseAppCheckToken.addOnSuccessListener {\n // ...\n}https://github.com/firebase/snippets-android/blob/391c1646eacf44d2aab3f76bcfa60dfc6c14acf1/appcheck/app/src/main/java/com/google/firebase/example/appcheck/kotlin/ApiWithAppCheckExample.kt#L37-L39\n```\n\nJava \n\n```java\nFirebaseAppCheck.getInstance()\n .getLimitedUseAppCheckToken().addOnSuccessListener(\n new OnSuccessListener\u003cAppCheckToken\u003e() {\n @Override\n public void onSuccess(AppCheckToken appCheckToken) {\n String token = appCheckToken.getToken();\n // ...\n }\n }\n );https://github.com/firebase/snippets-android/blob/391c1646eacf44d2aab3f76bcfa60dfc6c14acf1/appcheck/app/src/main/java/com/google/firebase/example/appcheck/ApiWithAppCheckExample.java#L49-L58\n```"]]