از اطلاعات کاربری Cloud برنامه Firebase ML Android خود محافظت کنید

اگر برنامه اندروید شما از یکی از APIهای ابری Firebase ML استفاده می‌کند، قبل از اینکه برنامه خود را در محیط تولید (production) راه‌اندازی کنید، باید اقدامات دیگری را برای جلوگیری از دسترسی غیرمجاز به API انجام دهید.

برای برنامه‌های کاربردی خود، اطمینان حاصل خواهید کرد که فقط کلاینت‌های احراز هویت شده می‌توانند به سرویس‌های ابری دسترسی داشته باشند. (توجه داشته باشید که فقط دستگاه‌های روت نشده می‌توانند با استفاده از روش شرح داده شده احراز هویت شوند.)

سپس، یک کلید API مخصوص اشکال‌زدایی ایجاد خواهید کرد که می‌توانید برای راحتی در طول آزمایش و توسعه از آن استفاده کنید.

۱. برنامه‌های تولیدی خود را در Firebase ثبت کنید

ابتدا، برنامه‌های تولیدی خود را در Firebase ثبت کنید.

  1. مطمئن شوید که امضاهای SHA-1 برنامه خود را دارید. برای یادگیری نحوه‌ی انجام این کار، به بخش احراز هویت کلاینت خود مراجعه کنید.

  2. به پروژه خود در کنسول Firebase بروید، سپس تب تنظیمات را انتخاب کنید.

  3. به پایین اسکرول کنید تا به کارت «برنامه‌های شما» برسید، سپس برنامه اندروید خود را انتخاب کنید.

  4. امضای SHA-1 برنامه خود را به اطلاعات برنامه اضافه کنید.

۲. دامنه کلیدهای API خود را محدود کنید

در مرحله بعد، کلیدهای API موجود خود را پیکربندی کنید تا دسترسی به API Cloud Vision را غیرفعال کنید:

  1. صفحه Credentials کنسول Google Cloud را باز کنید. در صورت درخواست، پروژه خود را انتخاب کنید.

  2. برای هر کلید API موجود در لیست، نمای ویرایش را باز کنید.

  3. در بخش محدودیت‌های API ، گزینه Restrict key را انتخاب کنید، سپس تمام APIهایی را که می‌خواهید کلید API به آنها دسترسی داشته باشد، به لیست اضافه کنید. مطمئن شوید که API مربوط به Cloud Vision را اضافه نمی‌کنید .

    وقتی محدودیت‌های API یک کلید API را پیکربندی می‌کنید، به صراحت APIهایی را که کلید به آنها دسترسی دارد، اعلام می‌کنید. به طور پیش‌فرض، وقتی در بخش محدودیت‌های API ، گزینه «کلید را محدود نکنید» انتخاب شده باشد، می‌توان از کلید API برای دسترسی به هر API فعال شده برای پروژه استفاده کرد.

اکنون، کلیدهای API موجود شما به سرویس‌های ابری ML دسترسی نخواهند داد، اما هر کلید برای هر API که به لیست محدودیت‌های API آن اضافه کرده‌اید، به کار خود ادامه خواهد داد.

توجه داشته باشید که اگر در آینده APIهای دیگری را فعال کنید، باید آنها را به لیست محدودیت‌های API برای کلید API مربوطه اضافه کنید.

۳. یک کلید API مخصوص اشکال‌زدایی ایجاد و استفاده کنید

در نهایت، یک کلید API جدید ایجاد کنید که فقط برای توسعه استفاده شود. Firebase ML می‌تواند از این کلید API برای دسترسی به سرویس‌های Google Cloud در محیط‌هایی که احراز هویت برنامه امکان‌پذیر نیست، مانند هنگام اجرا روی شبیه‌سازها، استفاده کند.

  1. یک کلید API جدید ایجاد کنید تا برای توسعه استفاده شود:

    1. صفحه Credentials کنسول Google Cloud را باز کنید. در صورت درخواست، پروژه خود را انتخاب کنید.

    2. روی ایجاد اعتبارنامه‌ها > کلید API کلیک کنید و کلید API جدید را یادداشت کنید. این کلید امکان دسترسی API را از برنامه‌های احراز هویت نشده فراهم می‌کند، بنابراین این کلید را محرمانه نگه دارید .

  2. برای اطمینان از اینکه کلید API اشکال‌زدایی جدید با برنامه منتشر شده شما فاش نمی‌شود، کلید API اشکال‌زدایی را در یک فایل مانیفست اندروید که فقط برای ساخت‌های اشکال‌زدایی استفاده می‌شود، مشخص کنید:

    1. اگر از قبل فایل debug manifest ندارید، با کلیک روی File > New > Other > Android Manifest File و انتخاب debug از مجموعه‌های منبع هدف، یکی ایجاد کنید.

    2. در فایل debug manifest، عبارت زیر را اضافه کنید:

      <application>
      <meta-data
          android:name="com.firebase.ml.cloud.ApiKeyForDebug"
          android:value="your-debug-api-key" />
      </application>
  3. در برنامه خود، Firebase ML طوری پیکربندی کنید که از تطبیق اثر انگشت گواهی برای تأیید اعتبار کلاینت در محیط عملیاتی استفاده کند و فقط در نسخه‌های اشکال‌زدایی از کلیدهای API - کلید اشکال‌زدایی - استفاده کند:

    Kotlin

    val optionsBuilder = FirebaseVisionCloudImageLabelerOptions.Builder()
    if (!BuildConfig.DEBUG) {
        // Requires physical, non-rooted device:
        optionsBuilder.enforceCertFingerprintMatch()
    }
    
    // Set other options. For example:
    optionsBuilder.setConfidenceThreshold(0.8f)
    // ...
    
    // And lastly:
    val options = optionsBuilder.build()
    FirebaseVision.getInstance().getCloudImageLabeler(options).processImage(myImage)

    Java

    FirebaseVisionCloudImageLabelerOptions.Builder optionsBuilder =
            new FirebaseVisionCloudImageLabelerOptions.Builder();
    if (!BuildConfig.DEBUG) {
        // Requires physical, non-rooted device:
        optionsBuilder.enforceCertFingerprintMatch();
    }
    
    // Set other options. For example:
    optionsBuilder.setConfidenceThreshold(0.8f);
    // ...
    
    // And lastly:
    FirebaseVisionCloudImageLabelerOptions options = optionsBuilder.build();
    FirebaseVision.getInstance().getCloudImageLabeler(options).processImage(myImage);

مراحل بعدی

برای کسب اطلاعات در مورد آماده‌سازی برنامه خود برای راه‌اندازی هنگام استفاده از سایر ویژگی‌های Firebase، به چک‌لیست راه‌اندازی مراجعه کنید.