Mã thông báo tin cậy là một API mới cho phép trang web truyền 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) nhằm chống lại hành vi 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ật mã cho người dùng được nguồn gốc đó tin tưởng. Các mã thông báo này do 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 người dùng tin tưởng người dùng trong một ngữ cảnh và được truyền tải sang một ngữ cảnh khác mà không cần xác định danh tính của người dùng hoặc liên kết 2 danh tính đó.
Bạn có thể dùng thử API qua bản minh hoạ và mã kiểm tra trong các thẻ Mạng và Ứng dụng 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ẻ Mạng của Công cụ Chrome cho nhà phát triển.](https://web.dev/static/articles/trust-tokens/image/screenshot-showing-trust-4dce3a304ea6.jpg?authuser=5&hl=vi)
![Ảnh chụp màn hình cho thấy Mã thông báo tin cậy trong thẻ Ứng dụng của Công cụ Chrome cho nhà phát triển.](https://web.dev/static/articles/trust-tokens/image/screenshot-showing-trust-8569c4b96af8e.jpg?authuser=5&hl=vi)
Tại sao chúng ta cần Mã thông báo tin cậy?
Web cần có những cách thức để thiết lập những tín hiệu tin cậy cho thấy rằng người dùng chính là người họ nói, chứ không phải là một bot giả vờ là con người hoặc một bên thứ ba ác ý nhằm lừa dối một người hoặc dịch vụ có thật. Chống gian lận đặc biệt quan trọng đối với nhà quảng cáo, nhà cung cấp quảng cáo và mạng phân phối nội dung (CDN).
Thật không may, có nhiều cơ chế hiện có để đánh giá và tuyên truyền độ tin cậy – chẳng hạn như tìm hiểu xem một lượt tương tác với một trang web có phải là của con người thực hay không – hãy 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 truyền tải 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ề Trust Tokens là 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à gửi nội dung rác. Có một cách để làm điều này là theo dõi hoạt động duyệt web bằng giá trị nhận dạng chung trên nhiều trang web cho mỗi người dùng. Đối với API bảo đảm quyền riêng tư, bạn không được chấp nhận điều này.
Từ phần giải thích đề xuất:
API này đề xuất một khu vực lưu trữ mới cho mỗi nguồn gốc dành cho các mã thông báo mật mã kiểu "Privacy Pass" (Thẻ quyền riêng tư) mà có thể truy cập được trong ngữ cảnh của bên thứ ba. Những 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 mã thông báo này được ký bằng mã hoá nên không thể giả mạo.
Khi một nguồn gốc nằm trong bối cảnh mà người dùng tin tưởng, họ có thể cấp cho trình duyệt một loạt mã thông báo. Các mã này có thể được "chi tiêu" sau này trong bối cảnh mà người dùng lẽ ra không xác định được hoặc ít đáng tin cậy hơn. Điều quan trọng là các mã thông báo này không thể phân biệt được với nhau, điều này ngăn các trang web theo dõi người dùng thông qua chúng.
Chúng tôi cũng đề xuất thêm 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á liên kết với một mã thông báo cụ thể.
Ví dụ về cách sử dụng API
Nội dung sau đây được điều chỉnh từ mã mẫu trong tài liệu giải thích về API.
Hãy tưởng tượng người dùng truy cập vào một trang web tin tức (publisher.example
) có nhúng quảng cáo từ mạng quảng cáo của bên thứ ba (foo.example
). Trước đây, người dùng này đã sử dụng một trang web mạng xã hội phát hành 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ật, chẳng hạn như hoạt động tài khoản hoặc vượt qua thử thách xác thực hình ảnh (CAPTCHA).
2.issuer.example
xác minh người dùng là người dùng và chạy JavaScript sau đây để 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 sẽ 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 truy cập vào publisher.example
.
5.publisher.example
muốn biết người dùng có phải là người thật hay không. publisher.example
tin tưởng issuer.example
, vì vậy, hệ thống sẽ 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 phương thức này trả về một lời hứa phân giải thành true
, điều đó có nghĩa là người dùng có mã thông báo từ issuer.example
để 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(...)
Bằng mã này:
- Người sử dụng
publisher.example
yêu cầu đổi thưởng. Nếu đổi mã thành công, nhà phát hành
issuer.example
sẽ trả về hồ sơ sử dụng ưu đãi cho biết rằng tại một thời điểm nào đó họ đã cấp mã thông báo hợp lệ cho trình duyệt này.7.Sau khi giải quyết xong lời hứa do
fetch()
trả về, bản ghi sử dụng ưu đãi 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', ...]
}
});
Bằng mã này:
- Bản ghi đổi thưởng được bao gồm dưới dạng tiêu đề của yêu cầu
Sec-Redemption-Record
. foo.example
nhận được bản ghi sử dụng ưu đãi và có thể phân tích cú pháp bản ghi để xác định xemissuer.example
có nghĩ rằng người dùng này là con người hay không.foo.example
sẽ phản hồi theo đó.
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 một nền tảng vị trí hoặc nhật ký tài khoản tại 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 có 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 gửi biểu mẫu) để làm tăng niềm tin của tổ chức 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 một nhà phát hành mã thông báo tin cậy như issuer.example
coi người dùng là đáng tin cậy, thì nhà 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 tạo yêu cầu fetch()
với 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 Thẻ quyền riêng tư bằng cách sử dụng một phương thức mã hoá gốc mới:
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.
Làm mù các số chỉ dùng một lần (mã hoá để nhà phát hành không thể xem nội dung của chúng) và đính kèm chúng vào yêu cầu trong tiêu đề
Sec-Trust-Token
.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 ẩn (chữ ký trên số chỉ dùng một lần mù), sau đó các mã thông báo này được ẩn và lưu trữ nội bộ cùng với các số chỉ dùng một lần liên kết của 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ó mã, trang web của nhà xuất bản có thể sử dụng mã đó để có được hồ sơ đổi thưởng:
fetch('issuer.example/trust-token', {
...
trustToken: {
type: 'token-redemption',
refreshPolicy: 'none'
}
...
}).then(...)
Nhà xuất bản có thể đưa các bản ghi sử dụng ưu đãi vào các yêu cầu yêu cầu 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ình chọn trong 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(...);
Bản ghi đổi thưởng được thêm 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ể biết 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ã, họ không thể phân biệt mã thông báo đó với các mã thông báo khác đã 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: hiện có nhiều cách khác mà nhà phát hành có thể (về lý thuyết) có thể kết hợp 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à các kỹ thuật theo dõi bí mật. Điều quan trọng là các trang web phải hiểu rõ quá trình chuyển đổi của hệ sinh thái này khi lên kế hoạch hỗ trợ. Đây là một khía cạnh chung của 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 đáng tin cậy: Một 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ố biện pháp giảm thiểu tấn công đối với loại hình tấn công này, chẳng hạn như cho phép nhà phát hành cung cấp nhiều mã thông báo cùng lúc để người dùng có đủ nguồn cung cấp để đảm bảo 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 chặn chi tiêu hai lần: phần mềm độc hại có thể tìm cách truy cập vào tất cả các mã thông báo tin cậy của 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ã sẽ được gửi đến cùng một tổ chức phát hành mã thông báo. Tổ chức này 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 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 bản ghi sử dụng ưu đãi ra bên ngoài fetch()
, chẳng hạn như qua 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: chúng tôi cần bạn đóng góp ý kiến phản hồi trong đề xuất này! Nếu bạn có ý kiến nhận xét, vui lòng tạo 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
- Bản minh hoạ về độ tin cậy (Trust Tokens)
- Bắt đầu dùng thử theo nguyên gốc của Chrome
- Tìm hiểu sâu hơn về Hộp cát về quyền riêng tư
- Thông tin giải thích về Trust Token API
- Dự án Chromium: API Mã thông báo tin cậy
- Ý định triển khai: Trust Token API
- Trạng thái của Nền tảng Chrome
- Thẻ và vé bảo vệ quyền riêng tư
- Các tiện ích của Privacy Pass
Cảm ơn những người đã giúp viết và đánh giá bài đăng này.