افزونههای کلاس درس درون یک iframe بارگذاری میشوند تا یک تجربه کاربری یکپارچه و راحت را برای کاربر نهایی فراهم کنند. پنج نوع iframe مجزا وجود دارد؛ برای مرور کلی در مورد هدف و ظاهر هر iframe، به صفحات iframeها در فهرست User journeys مراجعه کنید.
دستورالعملهای امنیتی iframe
انتظار میرود توسعهدهندگان برای ایمنسازی iframe خود از بهترین شیوههای صنعتی پیروی کنند. با این حال، شما همچنین باید تعاملات API خاصی را در جریان کاربری خود بگنجانید تا تأیید کنید که اعتبارنامههای معتبری دارید و میتوانید نقش کاربر را در دوره به درستی شناسایی کنید.
پیکربندی برنامه سرور
برای محافظت از iframe، پیکربندیهای سرور زیر را توصیه میکنیم:
- HTTPS الزامی است . ما اکیداً توصیه میکنیم از TLS 1.2 یا بالاتر استفاده کنید و HTTP Strict Transport Security (HSTS) را فعال کنید. به این مقاله مرتبط MDN در مورد Strict Transport Security مراجعه کنید.
- فعال کردن سیاست امنیتی سختگیرانه محتوا (Strict Content Security Policy) (CSP). به این مقاله OWASP و این مقاله مرتبط با سیاست امنیتی محتوا در MDN مراجعه کنید.
- ویژگی کوکی امن را فعال کنید. به ویژگی HttpOnly و این مقاله مرتبط با کوکیها در MDN مراجعه کنید.
پارامترهای پرس و جو
آیفریمها اطلاعات حیاتی را به عنوان پارامترهای پرسوجو به افزونه منتقل میکنند. دو دسته پارامتر وجود دارد: پارامترهای مربوط به پیوست و پارامترهای مربوط به ورود به سیستم.
پارامترهای مربوط به پیوست
پارامترهای مربوط به پیوست، اطلاعاتی در مورد دوره، تکلیف، پیوست افزونه، ارسال دانشجو و یک توکن مجوزدهی را در اختیار افزونه قرار میدهند.
- شناسه دوره
مقدار
courseId
یک شناسه برای دوره است.شامل تمام iframe ها میشود.
- شناسه کالا
مقدار
itemId
شناسهیAnnouncement
،CourseWork
یاCourseWorkMaterial
است که این پیوست به آن پیوست شده است.شامل تمام iframe ها میشود.
- نوع کالا
مقدار
itemType
نوع منبعی را که این پیوست به آن متصل شده است، مشخص میکند. مقدار رشتهای ارسالی یکی از انواع"announcements"
،"courseWork"
یا"courseWorkMaterials"
است.شامل تمام iframe ها میشود.
- شناسه پیوست
مقدار
attachmentId
یک شناسه برای فایل پیوست است.همراه با iframes های
teacherViewUri
،studentViewUri
وstudentWorkReviewUri
.- شناسه ارسال
مقدار
submissionId
شناسهای برای کار دانشجو است، اما باید در ترکیب باattachmentId
برای شناسایی کار دانشجو در یک تکلیف خاص استفاده شود.همراه با
studentWorkReviewUri
ارائه شده است.
- توکن افزونه
مقدار
addOnToken
یک توکن مجوز است که برای ایجاد افزونه از فراخوانیهایaddOnAttachments.create
استفاده میشود.همراه با iframe مربوط به Attachment Discovery و iframe مربوط به Link Upgrade .
- آدرس اینترنتی برای ارتقا
وجود مقدار
urlToUpgrade
به این معنی است که معلم یک پیوست لینک در تکلیف گنجانده و با ارتقاء آن به یک پیوست افزونه موافقت کرده است. اگر هنوز این ویژگی را پیکربندی نکردهاید، برای جزئیات بیشتر به راهنمای ارتقاء لینکها به پیوستهای افزونه مراجعه کنید.همراه با iframe مربوط به ارتقاء لینک .
پارامترهای مربوط به ورود
پارامتر کوئری login_hint
اطلاعاتی در مورد کاربر Classroom که از صفحه وب افزونه بازدید میکند، ارائه میدهد. این پارامتر کوئری در URL src
به iframe ارائه میشود. این پارامتر زمانی ارسال میشود که کاربر قبلاً از افزونه شما استفاده کرده باشد تا به کاهش مشکلات ورود کاربر نهایی کمک کند. شما ملزم به مدیریت این پارامتر کوئری در پیادهسازی افزونه خود هستید.
- راهنمای ورود
login_hint
یک شناسه منحصر به فرد برای حساب گوگل کاربر است. پس از اینکه کاربر برای اولین بار به افزونه شما وارد شد، پارامترlogin_hint
در هر بازدید بعدی از افزونه شما توسط همان کاربر ارسال میشود.دو کاربرد بالقوه برای پارامتر
login_hint
وجود دارد:- مقدار
login_hint
را در طول فرآیند احراز هویت ارسال کنید تا کاربر هنگام نمایش کادر محاورهای ورود نیازی به وارد کردن اطلاعات کاربری خود نداشته باشد. کاربر به طور خودکار وارد سیستم نمیشود. - پس از ورود کاربر، از این پارامتر برای مقایسه مقدار آن با هر کاربری که ممکن است قبلاً در افزونه وارد شده باشد، استفاده کنید. اگر موردی منطبق پیدا کردید، میتوانید کاربر را در حالت ورود به سیستم رها کنید و از نمایش جریان ورود به سیستم جلوگیری کنید. اگر پارامتر با هیچ یک از کاربران وارد شده شما مطابقت ندارد، با یک دکمه ورود به سیستم با برند گوگل، کاربر را به ورود به سیستم ترغیب کنید.
شامل تمام iframe ها میشود.
- مقدار
iframe کشف پیوست
ابعاد | توضیحات |
---|---|
مورد نیاز | بله |
یو آر آی | ارائه شده در فراداده افزونه |
پارامترهای پرس و جو | courseId ، itemId ، itemType ، addOnToken و login_hint . |
ارتفاع | ۸۰٪ ارتفاع پنجره منهای ۶۰ پیکسل برای هدر بالا |
عرض | حداکثر ۱۶۰۰ پیکسل ۹۰٪ عرض پنجره وقتی عرض پنجره کمتر از ۶۰۰ پیکسل باشد ۸۰٪ عرض پنجره وقتی عرض پنجره > ۶۰۰ پیکسل باشد |
مثال سناریوی کشف پیوست
- یک افزونهی Classroom در Google Workspace Marketplace با آدرس URL مربوط به Attachment Discovery به صورت
https://example.com/addon
ثبت شده است. - یک معلم این افزونه را نصب میکند و یک اطلاعیه، تکلیف یا مطلب جدید در یکی از دورههای خود ایجاد میکند. برای مثال،
itemId=234
،itemType=courseWork
وcourseId=123
. - معلم هنگام پیکربندی آن مورد، افزونهی تازه نصبشده را به عنوان پیوست انتخاب میکند.
- کلاسروم یک iframe با آدرس src تنظیم شده روی
https://example.com/addon?courseId=123&itemId=234&itemType=courseWork&addOnToken=456
ایجاد میکند.- معلم برای انتخاب پیوست، کاری را در داخل iframe انجام میدهد.
- هنگام انتخاب پیوست، افزونه یک
postMessage
به Classroom ارسال میکند تا iframe بسته شود.
آیفریمهای teacherViewUri و studentViewUri
ابعاد | توضیحات |
---|---|
مورد نیاز | بله |
یو آر آی | teacherViewUri یا studentViewUri |
پارامترهای پرس و جو | courseId ، itemId ، itemType ، attachmentId و login_hint . |
ارتفاع | ۱۰۰٪ ارتفاع پنجره منهای ۱۴۰ پیکسل برای هدر بالا |
عرض | ۱۰۰٪ عرض پنجره |
iframe مربوط به studentWorkReviewUri
ابعاد | توضیحات |
---|---|
مورد نیاز | خیر (تعیین میکند که آیا این یک پیوست از نوع فعالیت است یا خیر) |
یو آر آی | studentWorkReviewUri |
پارامترهای پرس و جو | courseId ، itemId ، itemType ، attachmentId ، submissionId و login_hint . |
ارتفاع | ۱۰۰٪ ارتفاع پنجره منهای ۱۶۸ پیکسل برای هدر بالا |
عرض | ۱۰۰٪ عرض پنجره منهای عرض سایدبار<> سایدبار در حالت باز ۳۱۲ پیکسل و در حالت جمع شده ۵۶ پیکسل است |
ارتقاء لینک iframe
ابعاد | توضیحات |
---|---|
مورد نیاز | بله، اگر افزونه شما از ارتقاء لینکها به پیوستهای افزونه پشتیبانی کند. |
یو آر آی | ارائه شده در فراداده افزونه |
پارامترهای پرس و جو | courseId ، itemId ، itemType ، addOnToken ، urlToUpgrade و login_hint . |
ارتفاع | ۸۰٪ ارتفاع پنجره منهای ۶۰ پیکسل برای هدر بالا |
عرض | حداکثر ۱۶۰۰ پیکسل ۹۰٪ عرض پنجره وقتی عرض پنجره کمتر از ۶۰۰ پیکسل باشد ۸۰٪ عرض پنجره وقتی عرض پنجره > ۶۰۰ پیکسل باشد |
مثال سناریوی ارتقاء لینک
- یک افزونهی Classroom با آدرس URL ارتقاء لینک
https://example.com/upgrade
ثبت شده است. شما الگوهای پیشوند میزبان و مسیر زیر را برای پیوستهای لینک ارائه دادهاید که Classroom باید سعی کند آنها را به یک پیوست الحاقی ارتقا دهد:- میزبان
example.com
و پیشوند مسیر/quiz
است.
- میزبان
- یک معلم یک اطلاعیه، تکلیف یا مطلب جدید در یکی از دورههای خود ایجاد میکند. برای مثال،
itemId=234
،itemType=courseWork
وcourseId=123
. - معلمی لینکی
https://example.com/quiz/5678
را در پنجرهی پیوست لینک قرار میدهد که با الگوی URL ارائه شده توسط شما مطابقت دارد. سپس از معلم خواسته میشود که لینک را به یک پیوست افزونه ارتقا دهد. کلاسروم، آیفریم «ارتقاء لینک» را با URL تنظیمشده روی
https://example.com/upgrade?courseId=123&itemId=234&itemType=courseWork&addOnToken=456&urlToUpgrade=https%3A%2F%2Fexample.com%2Fquiz%2F5678
اجرا میکند.شما پارامترهای کوئری ارسال شده به iframe را ارزیابی میکنید و نقطه پایانی
CreateAddOnAttachment
فراخوانی میکنید. توجه داشته باشید که پارامتر کوئریurlToUpgrade
هنگام ارسال به iframe، URI کدگذاری شده است. برای دریافت آن به شکل اصلی، باید پارامتر را رمزگشایی کنید. برای مثال، جاوا اسکریپت تابعdecodeURIComponent()
را ارائه میدهد.پس از ایجاد موفقیتآمیز یک پیوست افزونه از یک لینک، شما یک
postMessage
به Classroom ارسال میکنید تا iframe بسته شود.
آیفریم را ببندید
میتوان iframe را از طریق ابزار یادگیری با ارسال یک postMessage
با payload {type: 'Classroom', action: 'closeIframe'}
بست. Classroom فقط این postMessage
از host_name+port مربوط به URI اصلی که باز شده است، میپذیرد.
<button id="close">Send message to close iframe</button>
<script>
document.querySelector('#close')
.addEventListener('click', () => {
window.parent.postMessage({
type: 'Classroom',
action: 'closeIframe',
}, '*');
});
</script>
بستن iframe از iframe
دامنه+پورت صفحهای که رویداد postMessage
ارسال میکند باید همان دامنه+پورتی را داشته باشد که URI برای اجرای iframe استفاده شده است، در غیر این صورت پیام نادیده گرفته میشود. یک راه حل، هدایت مجدد به صفحهای در دامنه اصلی است که کاری جز ارسال رویداد postMessage
انجام نمیدهد.
بستن iframe از یک تب جدید
محافظتهای بین دامنهای مانع از این کار میشوند. یک راه حل این است که ارتباطات بین iframe و تب جدید را خودتان مدیریت کنید و در نهایت iframe را مسئول صدور رویداد بستن postMessage
قرار دهید. به عنوان یک نکته فرعی، هایپرلینک "باز کردن با نام شریک" حذف میشود تا کاربران در آینده نزدیک به این روش تب ایجاد نکنند.
محدودیتها
همه iframe ها با ویژگی های sandbox زیر باز می شوند:
-
allow-popups
-
allow-popups-to-escape-sandbox
-
allow-forms
-
allow-scripts
-
allow-storage-access-by-user-activation
-
allow-same-origin
و خطمشی ویژگیهای زیر:
-
allow="microphone *"
مسدود کردن کوکیهای شخص ثالث
توجه داشته باشید که مسدود کردن کوکیهای شخص ثالث، حفظ جلسه ورود به سیستم در iframe را دشوار میکند. برای اطلاع از وضعیت فعلی مسدود کردن کوکیها در مرورگرهای مختلف، به https://www.cookiestatus.com مراجعه کنید. البته، این مشکل مختص افزونههای Google Classroom نیست و بر همه وبسایتهایی که از iframeهای شخص ثالث استفاده میکنند، تأثیر میگذارد. بسیاری از شرکای ما قبلاً با این مشکل مواجه شدهاند.
برخی از راهکارهای کلی عبارتند از:
- برای ایجاد کوکی در یک زمینه شخص ثالث، یک برگه جدید باز کنید. برخی از مرورگرها به کوکیهای ایجاد شده در زمینه شخص ثالث در حالی که در یک زمینه شخص ثالث هستند، دسترسی میدهند.
- از کاربر بخواهید کوکیهای شخص ثالث را مجاز کند. این ممکن است همیشه برای همه کاربران امکانپذیر نباشد.
- برنامههای وب تک صفحهای طراحی کنید که به کوکیها متکی نباشند.
انتظار میرود محدودیتهای کوکی بیشتری در نسخههای آینده مرورگر اعمال شود. درخواستهای ویژگی ایجاد کنید تا در مورد چگونگی کاهش افزایش مورد نیاز شرکا، به گوگل بازخورد ارسال کنید.
فعال کردن قابلیت کشف افزونهها با استفاده از عبارات منظم URL
معلمان اغلب تکالیفی با پیوستهای لینک ایجاد میکنند. برای ترویج استفاده از افزونه خود، میتوانید عبارات منظمی را مشخص کنید که با URLهای منابعی که میتوانند در افزونه شما قابل دسترسی باشند، مطابقت داشته باشند. معلمی که پیوندی را پیوست میکند که با یکی از عبارات منظم شما مطابقت دارد، یک کادر محاورهای قابل رد شدن را مشاهده میکند که او را به امتحان افزونه شما تشویق میکند. آنها فقط در صورتی این کادر محاورهای را میبینند که افزونه از قبل برای حساب کاربری آنها نصب شده باشد.
اگر میخواهید این رفتار را برای معلمان فراهم کنید، عبارات منظم مناسب را در اختیار مخاطبین گوگل خود قرار دهید . اگر عبارات منظمی که ارائه میدهید بیش از حد گسترده هستند یا با افزونه دیگری تداخل دارند، ممکن است اصلاح شوند تا محدودتر یا متمایزتر شوند.
شکل ۱. معلم در حال انتخاب یک پیوست لینک برای یک تکلیف جدید.
شکل ۲. معلم در حال چسباندن لینکی از یک منبع شخص ثالث. معلم قبلاً افزونه Classroom شخص ثالث را نصب کرده است.
شکل ۳. پنجره محاورهای که وقتی لینک پیستشده با یک عبارت منظم مشخصشده توسط توسعهدهنده شخص ثالث مطابقت دارد، به معلم نمایش داده میشود.
اگر معلمی همانطور که در شکل ۳ نشان داده شده است، در پنجره پاپآپ گزینه «همین حالا امتحان کنید» را انتخاب کند، به iframe مربوط به Attachment Discovery افزونه شما هدایت میشود.