Tiện ích bổ sung dành cho Lớp học được tải trong một iframe để mang đến cho người dùng cuối trải nghiệm liền mạch và thuận tiện. Có 5 loại iframe riêng biệt . Hãy xem các trang iframe trong thư mục Hành trình của người dùng để biết tổng quan về mục đích và giao diện của từng iframe.
Nguyên tắc bảo mật iframe
Nhà phát triển phải tuân theo các phương pháp hay nhất trong ngành để bảo mật iframe. Tuy nhiên, bạn cũng nên kết hợp một số hoạt động tương tác API trong quy trình người dùng để xác nhận rằng bạn có thông tin đăng nhập hợp lệ và có thể xác định chính xác vai trò của người dùng trong khoá học.
Cấu hình ứng dụng máy chủ
Để bảo vệ iframe, bạn nên sử dụng các cấu hình máy chủ sau:
- Bạn phải dùng HTTPS. Bạn nên sử dụng TLS 1.2 trở lên và bật tính năng Bảo mật truyền tải nghiêm ngặt HTTP (HSTS). Hãy xem bài viết liên quan này của MDN về tính năng Bảo mật truyền tải nghiêm ngặt.
- Bật Chính sách bảo mật nội dung nghiêm ngặt (Strict CSP). Hãy xem bài viết này của OWASP và bài viết liên quan này của MDN về Chính sách bảo mật nội dung.
- Bật thuộc tính cookie An toàn. Hãy xem thuộc tính HttpOnly và bài viết liên quan này của MDN về Cookie.
Tham số truy vấn
Các iframe truyền thông tin quan trọng đến tiện ích bổ sung dưới dạng tham số truy vấn. Có 2 danh mục tham số: tham số liên quan đến tệp đính kèm và tham số liên quan đến việc đăng nhập.
Tham số liên quan đến tệp đính kèm
Các tham số liên quan đến tệp đính kèm cung cấp cho tiện ích bổ sung thông tin về khoá học, bài tập, tệp đính kèm tiện ích bổ sung, bài nộp của học viên và mã thông báo uỷ quyền.
- Mã khoá học
Giá trị
courseIdlà giá trị nhận dạng cho khoá học.Có trong tất cả các iframe.
- Mã mặt hàng
Giá trị
itemIdlà giá trị nhận dạng củaAnnouncement,CourseWorkhoặcCourseWorkMaterialmà tệp đính kèm này được đính kèm.Có trong tất cả các iframe.
- Loại mục
Giá trị
itemTypexác định loại tài nguyên mà tệp đính kèm này được đính kèm. Giá trị chuỗi được truyền là một trong các giá trị"announcements","courseWork"hoặc"courseWorkMaterials".Có trong tất cả các iframe.
- Mã nhận dạng tệp đính kèm
Giá trị
attachmentIdlà giá trị nhận dạng cho tệp đính kèm.Có trong các iframe
teacherViewUri,studentViewUrivàstudentWorkReviewUri.- Mã bài nộp
Giá trị
submissionIdlà giá trị nhận dạng cho bài tập của học viên, nhưng phải được sử dụng kết hợp vớiattachmentIdđể xác định bài tập của học viên cho một bài tập cụ thể.Có trong
studentWorkReviewUri.
- Mã thông báo tiện ích bổ sung
Giá trị
addOnTokenlà mã thông báo uỷ quyền dùng để thực hiện các lệnh gọiaddOnAttachments.createnhằm tạo tiện ích bổ sung.Có trong iframe Khám phá tệp đính kèm và iframe Nâng cấp đường liên kết.
- URL để nâng cấp
Sự hiện diện của giá trị
urlToUpgradengụ ý rằng giáo viên đã đưa tệp đính kèm Đường liên kết vào bài tập và đã đồng ý nâng cấp tệp đính kèm đó thành tệp đính kèm tiện ích bổ sung. Nếu bạn chưa định cấu hình tính năng này, hãy xem hướng dẫn về cách nâng cấp đường liên kết thành tệp đính kèm tiện ích bổ sung để biết thêm thông tin.Có trong iframe Nâng cấp đường liên kết.
Tham số liên quan đến việc đăng nhập
Tham số truy vấn login_hint cung cấp thông tin về người dùng Lớp học đang truy cập vào trang web tiện ích bổ sung. Tham số truy vấn này được cung cấp trên URL src của iframe. Tham số này được gửi khi người dùng đã sử dụng tiện ích bổ sung của bạn trước đó để giúp giảm bớt khó khăn khi đăng nhập cho người dùng cuối. Bạn phải xử lý tham số truy vấn này trong quá trình triển khai tiện ích bổ sung.
- Gợi ý đăng nhập
login_hintlà giá trị nhận dạng duy nhất cho Tài khoản Google của người dùng. Sau khi người dùng đăng nhập vào tiện ích bổ sung của bạn lần đầu tiên, tham sốlogin_hintsẽ được truyền trong mỗi lần người dùng đó truy cập vào tiện ích bổ sung của bạn.Có 2 cách sử dụng tiềm năng cho tham số
login_hint:- Truyền giá trị
login_hinttrong quy trình xác thực để người dùng không cần nhập thông tin đăng nhập khi hộp thoại đăng nhập xuất hiện. Người dùng không tự động đăng nhập. - Sau khi người dùng đăng nhập, hãy sử dụng tham số này để so sánh giá trị với bất kỳ người dùng nào mà bạn có thể đã đăng nhập vào tiện ích bổ sung. Nếu tìm thấy một kết quả trùng khớp, bạn có thể để người dùng đăng nhập và tránh hiển thị quy trình đăng nhập. Nếu tham số không khớp với bất kỳ người dùng nào đã đăng nhập, hãy nhắc người dùng đăng nhập bằng nút đăng nhập có thương hiệu Google.
Có trong tất cả các iframe.
- Truyền giá trị
iframe Khám phá tệp đính kèm
| Phương diện | Mô tả |
|---|---|
| Bắt buộc | Có |
| URI | Được cung cấp trong siêu dữ liệu tiện ích bổ sung |
| Tham số truy vấn | courseId, itemId, itemType, addOnToken và login_hint. |
| Chiều cao | 80% chiều cao cửa sổ trừ 60 pixel cho tiêu đề trên cùng |
| Chiều rộng | Tối đa là 1.600 pixel 90% chiều rộng cửa sổ khi chiều rộng cửa sổ <= 600 pixel rộng 80% chiều rộng cửa sổ khi chiều rộng cửa sổ > 600 pixel |
Ví dụ về tình huống Khám phá tệp đính kèm
- Một tiện ích bổ sung dành cho Lớp học được đăng ký trong Google Workspace Marketplace với URI Khám phá tệp đính kèm là
https://example.com/addon. - Giáo viên cài đặt tiện ích bổ sung này và tạo một thông báo, bài tập hoặc tài liệu mới trong một trong các khoá học của họ. Ví dụ:
itemId=234,itemType=courseWorkvàcourseId=123. - Trong khi định cấu hình mục đó, giáo viên chọn tiện ích bổ sung mới cài đặt làm tệp đính kèm.
- Lớp học tạo một iframe có URL src được đặt thành
https://example.com/addon?courseId=123&itemId=234&itemType=courseWork&addOnToken=456.- Giáo viên thực hiện công việc trong iframe để chọn tệp đính kèm.
- Khi chọn tệp đính kèm, tiện ích bổ sung sẽ gửi
postMessageđến Lớp học để đóng iframe.
iframe teacherViewUri và studentViewUri
| Phương diện | Mô tả |
|---|---|
| Bắt buộc | Có |
| URI | teacherViewUri hoặc studentViewUri |
| Tham số truy vấn | courseId, itemId, itemType, attachmentId và login_hint. |
| Chiều cao | 100% chiều cao cửa sổ trừ 140 pixel cho tiêu đề trên cùng |
| Chiều rộng | 100% chiều rộng cửa sổ |
iframe studentWorkReviewUri
| Phương diện | Mô tả |
|---|---|
| Bắt buộc | Không (Xác định xem đây có phải là tệp đính kèm thuộc loại hoạt động hay không) |
| URI | studentWorkReviewUri |
| Tham số truy vấn | courseId, itemId, itemType, attachmentId, submissionId và login_hint. |
| Chiều cao | 100% chiều cao cửa sổ trừ 168 pixel cho tiêu đề trên cùng |
| Chiều rộng | 100% chiều rộng cửa sổ trừ chiều rộng thanh bên<> thanh bên là 312 pixel khi mở rộng và 56 pixel khi thu gọn |
iframe Nâng cấp đường liên kết
| Phương diện | Mô tả |
|---|---|
| Bắt buộc | Có, nếu tiện ích bổ sung của bạn hỗ trợ việc nâng cấp đường liên kết thành tệp đính kèm tiện ích bổ sung là được hỗ trợ bởi tiện ích bổ sung của bạn. |
| URI | Được cung cấp trong siêu dữ liệu tiện ích bổ sung |
| Tham số truy vấn | courseId, itemId, itemType, addOnToken, urlToUpgrade và login_hint. |
| Chiều cao | 80% chiều cao cửa sổ trừ 60 pixel cho tiêu đề trên cùng |
| Chiều rộng | Tối đa là 1.600 pixel 90% chiều rộng cửa sổ khi chiều rộng cửa sổ <= 600 pixel rộng 80% chiều rộng cửa sổ khi chiều rộng cửa sổ > 600 pixel |
Ví dụ về tình huống Nâng cấp đường liên kết
- Một tiện ích bổ sung dành cho Lớp học được đăng ký bằng URI Nâng cấp đường liên kết là
https://example.com/upgrade. Bạn đã cung cấp các mẫu tiền tố máy chủ và đường dẫn sau đây cho các tệp đính kèm Đường liên kết mà Lớp học nên cố gắng nâng cấp thành tệp đính kèm tiện ích bổ sung:- Máy chủ là
example.comvà tiền tố đường dẫn là/quiz.
- Máy chủ là
- Giáo viên tạo một thông báo, bài tập hoặc tài liệu mới trong một trong các khoá học của họ. Ví dụ:
itemId=234,itemType=courseWorkvàcourseId=123. - Giáo viên dán một đường liên kết,
https://example.com/quiz/5678, trong hộp thoại tệp đính kèm Đường liên kết khớp với mẫu URL mà bạn đã cung cấp. Sau đó, giáo viên được nhắc nâng cấp Đường liên kết thành tệp đính kèm tiện ích bổ sung. Lớp học khởi chạy iframe Nâng cấp đường liên kết với URL được đặt thành
https://example.com/upgrade?courseId=123&itemId=234&itemType=courseWork&addOnToken=456&urlToUpgrade=https%3A%2F%2Fexample.com%2Fquiz%2F5678.Bạn đánh giá các tham số truy vấn được truyền trên iframe và thực hiện lệnh gọi đến điểm cuối
CreateAddOnAttachment. Xin lưu ý rằng tham số truy vấnurlToUpgradeđược mã hoá URI khi được truyền trên iframe. Bạn cần giải mã tham số để lấy tham số ở dạng ban đầu. Ví dụ: JavaScript cung cấp hàmdecodeURIComponent().Khi tạo thành công tệp đính kèm tiện ích bổ sung từ một Đường liên kết, bạn sẽ gửi
postMessageđến Lớp học để đóng iframe.
Đóng iframe
Bạn có thể đóng iframe từ công cụ học tập bằng cách gửi postMessage với tải trọng {type: 'Classroom', action: 'closeIframe'}.
Lớp học chỉ chấp nhận postMessage này từ host_name+port tương ứng với URI ban đầu đã mở.
<button id="close">Send message to close iframe</button>
<script>
document.querySelector('#close')
.addEventListener('click', () => {
window.parent.postMessage({
type: 'Classroom',
action: 'closeIframe',
}, '*');
});
</script>
Đóng iframe từ iframe
Miền+cổng của trang gửi sự kiện postMessage phải có cùng miền+cổng với URI dùng để khởi chạy iframe, nếu không, thông báo sẽ bị bỏ qua. Một giải pháp là chuyển hướng trở lại một trang trên miền ban đầu không làm gì ngoài việc gửi sự kiện postMessage.
Đóng iframe từ một thẻ mới
Các biện pháp bảo vệ trên nhiều miền ngăn chặn việc này hoạt động. Một giải pháp là tự xử lý thông tin liên lạc giữa iframe và thẻ mới, đồng thời để iframe chịu trách nhiệm cuối cùng về việc phát hành sự kiện postMessage đóng. Xin lưu ý rằng siêu liên kết "Mở trong Tên đối tác" đang bị xoá để người dùng không tạo thẻ theo cách này trong tương lai gần.
Quy định hạn chế
Tất cả các iframe đều được mở bằng các thuộc tính sandbox sau:
allow-popupsallow-popups-to-escape-sandboxallow-formsallow-scriptsallow-storage-access-by-user-activationallow-same-origin
và chính sách về tính năng sau:
allow="microphone *"
Chặn cookie của bên thứ ba
Xin lưu ý rằng việc chặn cookie của bên thứ ba khiến bạn khó duy trì phiên đã đăng nhập trong iframe. Hãy tham khảo https://www.cookiestatus.com để biết trạng thái hiện tại của việc chặn cookie trên nhiều trình duyệt. Tất nhiên, vấn đề này không chỉ xảy ra với tiện ích bổ sung dành cho Google Lớp học mà còn ảnh hưởng đến tất cả các trang web iframe của bên thứ ba. Nhiều đối tác của chúng tôi đã gặp phải vấn đề này.
Một số giải pháp chung là:
- Mở một thẻ mới để tạo cookie với tư cách là bên thứ nhất. Một số trình duyệt cấp quyền truy cập vào cookie được tạo với tư cách là bên thứ nhất trong khi ở bối cảnh của bên thứ ba.
- Yêu cầu người dùng cho phép cookie của bên thứ ba. Bạn có thể không phải lúc nào cũng thực hiện được việc này với tất cả người dùng.
- Thiết kế các ứng dụng web một trang không dựa vào cookie.
Chúng tôi dự kiến sẽ có thêm các quy định hạn chế về cookie trong các phiên bản trình duyệt trong tương lai. Tạo yêu cầu về tính năng để gửi ý kiến phản hồi cho Google về cách giảm bớt công sức mà đối tác phải bỏ ra.
Bật khả năng khám phá tiện ích bổ sung bằng biểu thức chính quy URL
Giáo viên thường tạo bài tập có tệp đính kèm đường liên kết. Để thúc đẩy việc sử dụng tiện ích bổ sung, bạn có thể chỉ định các biểu thức chính quy khớp với URL của các tài nguyên có thể truy cập trong tiện ích bổ sung. Giáo viên đính kèm một đường liên kết khớp với một trong các biểu thức chính quy của bạn sẽ thấy một hộp thoại có thể đóng khuyến khích họ dùng thử tiện ích bổ sung của bạn. Họ chỉ thấy hộp thoại nếu tiện ích bổ sung đã được cài đặt cho tài khoản của họ.
Nếu bạn muốn cung cấp hành vi này cho giáo viên, hãy cung cấp cho các liên hệ của bạn trên Google các biểu thức chính quy thích hợp. Nếu các biểu thức chính quy mà bạn cung cấp quá rộng hoặc xung đột với một tiện ích bổ sung khác, thì các biểu thức đó có thể được sửa đổi để bị hạn chế hơn hoặc khác biệt hơn.
Hình 1. Giáo viên chọn một tệp đính kèm đường liên kết cho một bài tập mới.
Hình 2. Giáo viên dán một đường liên kết từ nguồn của bên thứ ba. Giáo viên đã cài đặt tiện ích bổ sung dành cho Lớp học của bên thứ ba.
Hình 3. Hộp thoại tương tác được trình bày cho giáo viên khi đường liên kết được dán khớp với một biểu thức chính quy do nhà phát triển bên thứ ba chỉ định.
Nếu giáo viên chọn "Dùng thử ngay" trong cửa sổ bật lên như trong hình 3, họ sẽ được chuyển hướng đến iframe Khám phá tệp đính kèm của tiện ích bổ sung.