Triển khai một trình cung cấp tuỳ chỉnh cho tính năng Kiểm tra ứng dụng

App Check tích hợp sẵn tính năng hỗ trợ cho một số nhà cung cấp: DeviceCheck và Chứng thực ứng dụng trên các nền tảng của Apple, API Tính toàn vẹn của Play trên Android và reCAPTCHA Enterprise trong ứng dụng web (tổng quan). Đây là những nhà cung cấp được hiểu rõ và có thể đáp ứng nhu cầu của hầu hết nhà phát triển. Tuy nhiên, bạn cũng có thể triển khai các nhà cung cấp App Check tuỳ chỉnh của riêng mình. Bạn cần sử dụng trình cung cấp tuỳ chỉnh khi:

  • Bạn muốn sử dụng một nhà cung cấp khác ngoài các nhà cung cấp tích hợp.

  • Bạn muốn sử dụng các trình cung cấp tích hợp theo cách không được hỗ trợ.

  • Bạn muốn xác minh các thiết bị sử dụng các nền tảng khác ngoài Apple, Android và web. Ví dụ: bạn có thể tạo trình cung cấp App Check cho các hệ điều hành máy tính hoặc thiết bị Internet của vạn vật.

  • Bạn muốn triển khai kỹ thuật xác minh của riêng mình trên mọi nền tảng.

Tổng quan

Để triển khai trình cung cấp App Check tuỳ chỉnh, bạn cần một môi trường phụ trợ bảo mật có thể chạy Node.js Firebase Admin SDK. Đây có thể là Cloud Functions, một nền tảng vùng chứa như Cloud Run hoặc máy chủ của riêng bạn.

Trong môi trường này, bạn sẽ cung cấp một dịch vụ có thể truy cập vào mạng để nhận bằng chứng xác thực từ ứng dụng của bạn. Nếu bằng chứng về tính xác thực vượt qua kết quả đánh giá tính xác thực, thì dịch vụ này sẽ trả về một mã thông báo App Check. Các chỉ báo cụ thể mà bạn sử dụng làm bằng chứng về tính xác thực sẽ phụ thuộc vào nhà cung cấp bên thứ ba mà bạn đang sử dụng hoặc các chỉ báo của sáng chế của riêng bạn, nếu bạn đang triển khai logic tuỳ chỉnh.

Thông thường, bạn hiển thị dịch vụ này dưới dạng điểm cuối REST hoặc gRPC, nhưng chi tiết này là tuỳ thuộc vào bạn.

Tạo điểm cuối thu nạp mã thông báo

  1. Cài đặt và khởi chạy Admin SDK.

  2. Tạo một điểm cuối có thể truy cập mạng có thể nhận dữ liệu về tính xác thực từ các ứng dụng khách. Ví dụ: sử dụng Cloud Functions:

    // Create endpoint at https://example-app.cloudfunctions.net/fetchAppCheckToken
    exports.fetchAppCheckToken = functions.https.onRequest((request, response) => {
      // ...
    });
    
  3. Thêm vào logic điểm cuối để đánh giá dữ liệu về tính xác thực. Đây là logic cốt lõi của trình cung cấp App Check tuỳ chỉnh mà bạn cần tự viết.

  4. Nếu bạn xác định ứng dụng là xác thực, hãy sử dụng Admin SDK để tạo mã thông báo App Check và trả về mã thông báo đó cũng như thời gian hết hạn cho ứng dụng:

    const admin = require('firebase-admin');
    admin.initializeApp();
    
    // ...
    
    admin.appCheck().createToken(appId)
        .then(function (appCheckToken) {
          // Token expires in an hour.
          const expiresAt = Math.floor(Date.now() / 1000) + 60 * 60;
    
          // Return appCheckToken and expiresAt to the client.
        })
       .catch(function (err) {
         console.error('Unable to create App Check token.');
         console.error(err);
       });
    

    Nếu bạn không thể xác minh tính xác thực của ứng dụng, hãy trả về lỗi (ví dụ: trả về lỗi HTTP 403).

  5. Không bắt buộc: Thiết lập thời gian tồn tại (TTL) cho mã thông báo App Check do nhà cung cấp tuỳ chỉnh của bạn phát hành bằng cách truyền đối tượng AppCheckTokenOptions đến createToken(). Bạn có thể đặt TTL thành bất kỳ giá trị nào trong khoảng từ 30 phút đến 7 ngày. Khi đặt giá trị này, hãy lưu ý những điểm đánh đổi sau:

    • Bảo mật: TTL ngắn hơn giúp tăng cường bảo mật vì giảm khoảng thời gian mà kẻ tấn công có thể lợi dụng mã thông báo bị rò rỉ hoặc bị chặn.
    • Hiệu suất: TTL ngắn hơn nghĩa là ứng dụng của bạn sẽ thực hiện chứng thực thường xuyên hơn. Vì quy trình chứng thực ứng dụng làm tăng độ trễ cho các yêu cầu mạng mỗi khi quy trình này được thực hiện, nên TTL ngắn có thể ảnh hưởng đến hiệu suất của ứng dụng.

    TTL mặc định là 1 giờ là hợp lý đối với hầu hết các ứng dụng.

Các bước tiếp theo

Giờ đây, bạn đã triển khai logic phía máy chủ của nhà cung cấp tuỳ chỉnh, hãy tìm hiểu cách sử dụng logic đó từ ứng dụng Apple, Androidweb.