Triển khai nhà cung cấp Kiểm tra ứng dụng tùy chỉnh

Kiểm tra ứng dụng có hỗ trợ tích hợp cho một số nhà cung cấp: Kiểm tra thiết bị và Chứng thực ứng dụng trên nền tảng Apple, Tính toàn vẹn của Play và SafetyNet 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 các nhà phát triển. Tuy nhiên, bạn cũng có thể triển khai nhà cung cấp Kiểm tra ứng dụng tùy chỉnh của riêng mình. Việc sử dụng nhà cung cấp tùy chỉnh là cần thiết khi:

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

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

  • Bạn muốn xác minh 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 nhà cung cấp Kiểm tra ứng dụng cho hệ điều hành máy tính để bàn hoặc thiết bị Internet-of-Things.

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

Tổng quan

Để triển khai nhà cung cấp Kiểm tra ứng dụng tùy chỉnh, bạn cần có môi trường phụ trợ an toàn có thể chạy SDK quản trị Firebase của Node.js. Đây có thể là Cloud Functions, một nền tảng container như Cloud Run hoặc máy chủ của riêng bạn.

Từ môi trường này, bạn sẽ cung cấp một dịch vụ có thể truy cập mạng để nhận bằng chứng xác thực từ ứng dụng khách của bạn và—nếu bằng chứng xác thực vượt qua đánh giá xác thực của bạn—sẽ trả về mã thông báo Kiểm tra ứng dụng. Các chỉ báo cụ thể mà bạn sử dụng làm bằng chứng xác thực sẽ tùy 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 do phát minh của chính bạn, nếu bạn đang triển khai logic tùy 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 tùy thuộc vào bạn.

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

  1. Cài đặt và khởi chạy SDK quản trị .

  2. Tạo điểm cuối có thể truy cập mạng để nhận dữ liệu xác thực từ khách hàng của bạn. Ví dụ: sử dụng Chức năng đám mây:

    // 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 xác thực. Đây là logic cốt lõi của nhà cung cấp Kiểm tra ứng dụng tùy chỉnh mà bạn sẽ cần phải tự viết.

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

    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 khách, hãy trả về lỗi (ví dụ: trả về lỗi HTTP 403).

  5. Tùy chọn : Đặt thời gian tồn tại (TTL) cho mã thông báo Kiểm tra ứng dụng do nhà cung cấp tùy chỉnh của bạn phát hành bằng cách chuyển đối tượng AppCheckTokenOptions tới createToken() . Bạn có thể đặt TTL thành bất kỳ giá trị nào trong khoảng thời gian từ 30 phút đến 7 ngày. Khi đặt giá trị này, hãy lưu ý đến những cân bằng sau:

    • Bảo mật: TTL ngắn hơn cung cấp khả năng bảo mật mạnh mẽ hơn vì nó làm giảm nguy cơ kẻ tấn công có thể lạm dụng mã thông báo bị rò rỉ hoặc bị chặn.
    • Hiệu suất: TTL ngắn hơn có 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 sẽ tăng thêm độ trễ cho các yêu cầu mạng mỗi khi yêu cầu được thực hiện nên một TTL ngắn có thể ảnh hưởng đến hiệu suất ứng dụng của bạn.

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

Bước tiếp theo

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

,

Kiểm tra ứng dụng có hỗ trợ tích hợp cho một số nhà cung cấp: Kiểm tra thiết bị và Chứng thực ứng dụng trên nền tảng Apple, Tính toàn vẹn của Play và SafetyNet 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 các nhà phát triển. Tuy nhiên, bạn cũng có thể triển khai nhà cung cấp Kiểm tra ứng dụng tùy chỉnh của riêng mình. Việc sử dụng nhà cung cấp tùy chỉnh là cần thiết khi:

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

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

  • Bạn muốn xác minh 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 nhà cung cấp Kiểm tra ứng dụng cho hệ điều hành máy tính để bàn hoặc thiết bị Internet-of-Things.

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

Tổng quan

Để triển khai nhà cung cấp Kiểm tra ứng dụng tùy chỉnh, bạn cần có môi trường phụ trợ an toàn có thể chạy SDK quản trị Firebase của Node.js. Đây có thể là Cloud Functions, một nền tảng container như Cloud Run hoặc máy chủ của riêng bạn.

Từ môi trường này, bạn sẽ cung cấp một dịch vụ có thể truy cập mạng để nhận bằng chứng xác thực từ ứng dụng khách của bạn và—nếu bằng chứng xác thực vượt qua đánh giá xác thực của bạn—sẽ trả về mã thông báo Kiểm tra ứng dụng. Các chỉ báo cụ thể mà bạn sử dụng làm bằng chứng xác thực sẽ tùy 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 do phát minh của chính bạn, nếu bạn đang triển khai logic tùy 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 tùy thuộc vào bạn.

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

  1. Cài đặt và khởi chạy SDK quản trị .

  2. Tạo điểm cuối có thể truy cập mạng để nhận dữ liệu xác thực từ khách hàng của bạn. Ví dụ: sử dụng Chức năng đám mây:

    // 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 xác thực. Đây là logic cốt lõi của nhà cung cấp Kiểm tra ứng dụng tùy chỉnh mà bạn sẽ cần phải tự viết.

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

    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 khách, hãy trả về lỗi (ví dụ: trả về lỗi HTTP 403).

  5. Tùy chọn : Đặt thời gian tồn tại (TTL) cho mã thông báo Kiểm tra ứng dụng do nhà cung cấp tùy chỉnh của bạn cấp bằng cách chuyển đối tượng AppCheckTokenOptions tới createToken() . Bạn có thể đặt TTL thành bất kỳ giá trị nào trong khoảng thời gian từ 30 phút đến 7 ngày. Khi đặt giá trị này, hãy lưu ý đến những cân bằng sau:

    • Bảo mật: TTL ngắn hơn mang lại khả năng bảo mật mạnh mẽ hơn vì nó làm giảm nguy cơ kẻ tấn công có thể lạm dụng mã thông báo bị rò rỉ hoặc bị chặn.
    • Hiệu suất: TTL ngắn hơn có 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 tăng thêm độ trễ cho các yêu cầu mạng mỗi khi yêu cầu được thực hiện nên một TTL ngắn có thể ảnh hưởng đến hiệu suất ứng dụng của bạn.

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

Bước tiếp theo

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