از منابع باطن سفارشی با App Check در Android محافظت کنید
با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
میتوانید App Check برای محافظت از منابع پشتیبان سفارشی غیر Google برای برنامهتان، مانند باطن میزبانی شده خودتان، استفاده کنید. برای انجام این کار، باید هر دو مورد زیر را انجام دهید:
- مشتری برنامه خود را تغییر دهید تا یک نشانه App Check به همراه هر درخواست به باطن شما ارسال شود، همانطور که در این صفحه توضیح داده شده است.
- باطن خود را طوری تغییر دهید که با هر درخواست، به یک نشانه معتبر App Check نیاز داشته باشید، همانطور که در تأیید نشانههای App Check از یک باطن سفارشی توضیح داده شده است.
قبل از شروع
با استفاده از ارائهدهنده پیشفرض Play Integrity یا یک ارائهدهنده سفارشی ، App Check به برنامه خود اضافه کنید.
ارسال نشانههای App Check با درخواستهای Backend
برای اطمینان از اینکه درخواستهای Backend شما شامل یک نشانه معتبر، منقضی نشده، App Check ، هر درخواست را در یک تماس با getAppCheckToken()
قرار دهید. کتابخانه App Check توکن را در صورت لزوم بازخوانی میکند و شما میتوانید در شنونده موفقیت روش به رمز دسترسی داشته باشید.
هنگامی که یک توکن معتبر دارید، آن را همراه با درخواست به باطن خود ارسال کنید. جزئیات نحوه انجام این کار به شما بستگی دارد، اما نشانههای 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 License است. نمونه کدها نیز دارای مجوز Apache 2.0 License است. برای اطلاع از جزئیات، به خطمشیهای سایت Google Developers مراجعه کنید. جاوا علامت تجاری ثبتشده Oracle و/یا شرکتهای وابسته به آن است.
تاریخ آخرین بهروزرسانی 2025-08-22 بهوقت ساعت هماهنگ جهانی.
[null,null,["تاریخ آخرین بهروزرسانی 2025-08-22 بهوقت ساعت هماهنگ جهانی."],[],[],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/1e298008c7f30b2188d82ba5ea7f30c0e8f73682/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/1e298008c7f30b2188d82ba5ea7f30c0e8f73682/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/1e298008c7f30b2188d82ba5ea7f30c0e8f73682/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/1e298008c7f30b2188d82ba5ea7f30c0e8f73682/appcheck/app/src/main/java/com/google/firebase/example/appcheck/ApiWithAppCheckExample.java#L49-L58\n```"]]