Bắt đầu sử dụng Trust Token

Mã thông báo tin cậy là một API mới cho phép trang web truyền tải một lượng thông tin hạn chế từ ngữ cảnh duyệt web này sang ngữ cảnh duyệt web khác (ví dụ: trên nhiều trang web) để giúp chống gian lận mà không cần theo dõi thụ động.



Tóm tắt

Mã thông báo tin cậy cho phép một nguồn gốc phát hành mã thông báo mã hoá cho người dùng mà nó tin tưởng. Các mã thông báo này được trình duyệt của người dùng lưu trữ. Sau đó, trình duyệt có thể sử dụng mã thông báo này trong các ngữ cảnh khác để đánh giá tính xác thực của người dùng.

Trust Token API cho phép truyền tin cậy của người dùng trong một ngữ cảnh sang ngữ cảnh khác mà không cần xác định người dùng hoặc liên kết hai danh tính.

Bạn có thể dùng thử API này bằng bản minh hoạmã thông báo kiểm tra của chúng tôi trong các thẻ Mạng Công cụ của Chrome cho nhà phát triển và Ứng dụng.

Ảnh chụp màn hình cho thấy Mã thông báo tin cậy trong thẻ Mạng của Công cụ của Chrome cho nhà phát triển.
Mã thông báo tin cậy trong thẻ Mạng của Công cụ của Chrome cho nhà phát triển.
Ảnh chụp màn hình cho thấy Mã thông báo tin cậy trong thẻ Ứng dụng Công cụ của Chrome cho nhà phát triển.
Mã thông báo tin cậy trong thẻ Ứng dụng của Công cụ của Chrome cho nhà phát triển.

Tại sao chúng ta cần Mã thông báo tin cậy?

Web cần nhiều cách để thiết lập những tín hiệu đáng tin cậy cho thấy người dùng đúng là người như họ nói, chứ không phải là bot giả vờ là người hay một bên thứ ba ác ý lừa đảo một người hoặc dịch vụ thực. Việc chống gian lận là việc đặc biệt quan trọng đối với các nhà quảng cáo, nhà cung cấp quảng cáo và CDN.

Thật không may, hiện có nhiều cơ chế để đánh giá và tuyên bố độ tin cậy (ví dụ: để biết một lượt tương tác với trang web có phải là của người thực hay không) tận dụng các kỹ thuật cũng có thể dùng để tạo vân tay số.

API phải bảo vệ quyền riêng tư, cho phép lan truyền niềm tin trên các trang web mà không cần theo dõi từng người dùng.

Đề xuất về Mã thông báo tin cậy có nội dung gì?

Web dựa vào việc xây dựng các tín hiệu tin cậy để phát hiện hành vi gian lận và spam. Một cách để thực hiện việc này là theo dõi hoạt động duyệt web với giá trị nhận dạng chung trên nhiều trang web của mỗi người dùng. Điều này không được chấp nhận đối với một API bảo đảm quyền riêng tư.

Trong nội dung giải thích đề xuất:

API này đề xuất một vùng lưu trữ mới theo từng nguồn gốc cho các mã thông báo mật mã kiểu "Privacy Pass" mà có thể truy cập được trong ngữ cảnh của bên thứ ba. Các mã thông báo này không được cá nhân hoá và không thể dùng để theo dõi người dùng, nhưng được ký ở dạng mã hoá nên không thể giả mạo.

Khi một nguồn gốc đặt trong bối cảnh mà họ tin tưởng người dùng, họ có thể cấp cho trình duyệt một lô mã thông báo mà có thể được "chi tiêu" sau này trong ngữ cảnh mà người dùng sẽ không xác định hoặc ít được tin cậy hơn. Điều quan trọng là các mã thông báo không thể phân biệt được với nhau, ngăn các trang web theo dõi người dùng thông qua mã thông báo đó.

Chúng tôi cũng đề xuất một cơ chế mở rộng cho trình duyệt để ký các yêu cầu gửi đi bằng các khoá được liên kết với một việc sử dụng mã thông báo cụ thể.

Cách sử dụng API mẫu

Phần sau được điều chỉnh từ mã mẫu trong phần giải thích API.

Hãy tưởng tượng rằng người dùng truy cập vào một trang web tin tức (publisher.example) nhúng quảng cáo từ một mạng quảng cáo bên thứ ba (foo.example). Người dùng đó trước đây đã sử dụng một trang web mạng xã hội tạo ra mã thông báo tin cậy (issuer.example).

Trình tự dưới đây cho thấy cách hoạt động của mã thông báo tin cậy.

1.Người dùng truy cập issuer.example và thực hiện các hành động khiến trang web tin rằng họ là người thực, chẳng hạn như hoạt động tài khoản hoặc vượt qua một thử thách xác thực hình ảnh (CAPTCHA).

2.issuer.example xác minh người dùng là người và chạy JavaScript sau để phát hành mã thông báo tin cậy cho trình duyệt của người dùng:

fetch('https://issuer.example/trust-token', {
  trustToken: {
    type: 'token-request',
    issuer: 'https://issuer.example'
  }
}).then(...)

3.Trình duyệt của người dùng lưu trữ mã thông báo tin cậy và liên kết mã đó với issuer.example.

4.Một thời gian sau, người dùng này truy cập publisher.example.

5.publisher.example muốn biết người dùng có phải là người thực hay không. publisher.example tin tưởng issuer.example, vì vậy, họ kiểm tra xem trình duyệt của người dùng có mã thông báo hợp lệ từ nguồn gốc đó hay không:

document.hasTrustToken('https://issuer.example');

6.Nếu thao tác này trả về một lời hứa phân giải thành true, tức là người dùng có mã thông báo từ issuer.example, vì vậy, publisher.example có thể cố gắng sử dụng mã thông báo:

fetch('https://issuer.example/trust-token', {
trustToken: {
  type: 'token-redemption',
  issuer: 'https://issuer.example',
  refreshPolicy: {none, refresh}
}
}).then(...)

Với mã này:

  1. Người sử dụng ưu đãi publisher.example yêu cầu sử dụng một ưu đãi.
  2. Nếu quy trình đổi thưởng thành công, tổ chức phát hành issuer.example sẽ trả về một hồ sơ đổi thưởng cho biết tại một thời điểm nào đó họ đã phát hành một mã thông báo hợp lệ cho trình duyệt này.

    7.Sau khi lời hứa được fetch() trả về đã được giải quyết, bản ghi đổi thưởng có thể được dùng trong các yêu cầu tài nguyên tiếp theo:

fetch('https://foo.example/get-content', {
  trustToken: {
    type: 'send-redemption-record',
    issuers: ['https://issuer.example', ...]
  }
});

Với mã này:

  1. Hồ sơ đổi thưởng được đưa vào dưới dạng tiêu đề yêu cầu Sec-Redemption-Record.
  2. foo.example nhận được hồ sơ đổi thưởng và có thể phân tích cú pháp bản ghi để xác định xem issuer.example có nghĩ người dùng này là người hay không.
  3. foo.example phản hồi tương ứng.
Làm thế nào để xác định được một trang web có đáng tin cậy hay không?

Bạn có thể có nhật ký mua sắm trên một trang web thương mại điện tử, thông tin đăng ký trên nền tảng vị trí hoặc nhật ký tài khoản tại một ngân hàng. Tổ chức phát hành cũng có thể xem xét các yếu tố khác như khoảng thời gian bạn tạo tài khoản hoặc các hoạt động tương tác khác (chẳng hạn như hình ảnh xác thực (CAPTCHA) hoặc lượt gửi biểu mẫu) làm tăng niềm tin của nhà phát hành đối với khả năng bạn là người thực.

Phát hành mã thông báo tin cậy

Nếu người dùng được một công ty phát hành mã thông báo tin cậy chẳng hạn như issuer.example coi là đáng tin cậy, thì tổ chức phát hành đó có thể tìm nạp mã thông báo tin cậy cho người dùng bằng cách gửi yêu cầu fetch() có tham số trustToken:

fetch('issuer.example/trust-token', {
  trustToken: {
    type: 'token-request'
  }
}).then(...)

Thao tác này sẽ gọi một phần mở rộng của giao thức cấp Quyền riêng tư bằng cách sử dụng mật mã gốc mới:

  1. Tạo một tập hợp các số giả ngẫu nhiên được gọi là số chỉ dùng một lần.

  2. Ẩn các số chỉ dùng một lần (mã hoá các số chỉ dùng một lần để trình phát hành không thể xem nội dung) và đính kèm các số chỉ dùng một lần vào yêu cầu trong tiêu đề Sec-Trust-Token.

  3. Gửi yêu cầu POST đến điểm cuối được cung cấp.

Điểm cuối phản hồi bằng mã thông báo bị ẩn (chữ ký trên số chỉ dùng một lần ẩn), sau đó, các mã này sẽ được loại bỏ và lưu trữ nội bộ cùng với các số chỉ dùng một lần được liên kết bởi trình duyệt dưới dạng mã thông báo tin cậy.

Sử dụng mã thông báo tin cậy

Trang web của nhà xuất bản (chẳng hạn như publisher.example trong ví dụ ở trên) có thể kiểm tra xem có mã thông báo tin cậy nào cho người dùng hay không:

const userHasTokens = await document.hasTrustToken('issuer.example/trust-token');

Nếu có sẵn mã thông báo, trang web của nhà xuất bản có thể sử dụng mã đó để lấy hồ sơ về việc sử dụng mã:

fetch('issuer.example/trust-token', {
  ...
  trustToken: {
    type: 'token-redemption',
    refreshPolicy: 'none'
  }
  ...
}).then(...)

Nhà xuất bản có thể đưa hồ sơ đổi thưởng vào các yêu cầu cần có mã thông báo tin cậy (chẳng hạn như đăng bình luận, thích một trang hoặc bỏ phiếu trong một cuộc thăm dò ý kiến) bằng cách sử dụng lệnh gọi fetch() như sau:

fetch('https://foo.example/post-comment', {
  ...
  trustToken: {
    type: 'send-redemption-record',
    issuers: ['issuer.example/trust-token', ...]
  }
  ...
}).then(...);

Hồ sơ đổi thưởng được đưa vào dưới dạng tiêu đề của yêu cầu Sec-Redemption-Record.

Những điều cần cân nhắc về quyền riêng tư

Mã thông báo được thiết kế để "không thể huỷ liên kết". Nhà phát hành có thể tìm hiểu thông tin tổng hợp về những trang web mà người dùng truy cập nhưng không thể liên kết việc phát hành với việc sử dụng mã: khi người dùng sử dụng mã thông báo, họ không thể phân biệt mã này với các mã thông báo khác mà họ đã tạo. Tuy nhiên, mã thông báo tin cậy hiện không tồn tại tách biệt: trên lý thuyết, có các cách khác mà một tổ chức phát hành có thể tham gia danh tính của người dùng trên các trang web, chẳng hạn như cookie của bên thứ ba và kỹ thuật theo dõi bí mật. Các trang web cần hiểu rõ quá trình chuyển đổi trong hệ sinh thái này khi lên kế hoạch hỗ trợ. Đây là khía cạnh chung trong quá trình chuyển đổi đối với nhiều API Hộp cát về quyền riêng tư, vì vậy, không được thảo luận thêm ở đây.

Lưu ý về bảo mật

Tình trạng cạn kiệt mã thông báo tin cậy: trang web độc hại có thể cố ý làm cạn kiệt nguồn cung cấp mã thông báo của người dùng từ một nhà phát hành cụ thể. Có một số giải pháp giảm thiểu chống lại loại hình tấn công này, chẳng hạn như cho phép các nhà phát hành cung cấp nhiều mã thông báo cùng một lúc, để người dùng có đủ nguồn cung nhằm đảm bảo rằng các trình duyệt chỉ sử dụng một mã thông báo cho mỗi lượt xem trang cấp cao nhất.

Ngăn chi tiêu gấp đôi: phần mềm độc hại có thể tìm cách truy cập vào tất cả mã thông báo tin cậy của một người dùng. Tuy nhiên, mã thông báo sẽ hết theo thời gian, vì mọi lượt sử dụng mã đều được gửi đến cùng một nhà phát hành mã thông báo nên có thể xác minh rằng mỗi mã thông báo chỉ được sử dụng một lần. Để giảm thiểu rủi ro, tổ chức phát hành thẻ cũng có thể ký ít mã thông báo hơn.

Cơ chế yêu cầu

Bạn có thể cho phép gửi hồ sơ đổi thưởng ra bên ngoài fetch(), chẳng hạn như trong các yêu cầu chỉ đường. Các trang web cũng có thể đưa dữ liệu của nhà phát hành vào tiêu đề phản hồi HTTP để cho phép sử dụng mã thông báo song song với quá trình tải trang.

Xin nhắc lại: đề xuất này cần bạn phản hồi! Nếu bạn có nhận xét, vui lòng tạo một vấn đề trong kho lưu trữ nội dung giải thích về Mã thông báo tin cậy.

Tìm hiểu thêm


Cảm ơn tất cả những người đã giúp viết và đánh giá bài đăng này.

Ảnh của ZSun Fu trên Unsplash.