يصف هذا الدليل مجموعة من الميزات التي تعرض إشارات ثقة إضافية حول حساب Google. تساعد إشارات الثقة هذه نظام إدارة الحساب في اتّخاذ قرارات مستندة إلى المخاطر أثناء عملية الاشتراك وإنشاء الحساب، وفي وقت لاحق للمستخدمين العائدين.
الجلسات
يعرض طلب المصادقة من قِبل أحد التطبيقات رمز تعريف. على سبيل المثال، عند النقر على زر "تسجيل الدخول باستخدام حساب Google"، يتم عرض رمز تعريف لتطبيق العميل أو الخادم على Android أو iOS أو الويب الذي يعرض الزر.
تُعدّ المصادقة لتسجيل الدخول إلى حساب Google حدثًا منفصلاً ومستقلاً. تمثّل المطالبات المعروضة في رمز التعريف هذا الحدث. على سبيل المثال، وقت المصادقة والطرق المستخدَمة لتسجيل الدخول إلى حساب Google.
هناك لحظتان للمصادقة وجلستان للمستخدم:
- جلسة المستخدم <-> Google يتم إنشاؤها عندما يسجّل المستخدم الدخول إلى حسابه على Google. تُدير Google دورة حياة هذه الجلسة وأمانها. توفّر لك المطالبتان
auth_timeوamrإحصاءات حول هذه الجلسة. - جلسة المستخدم <-> تطبيقك يتم إنشاؤها بعد أن يسجّل المستخدم الدخول إلى تطبيقك، وغالبًا ما يتم ذلك باستخدام ميزة "تسجيل الدخول باستخدام حساب Google". يُدير تطبيقك هذه الجلسة باستخدام المطالبات لتحسين قرارات إدارة الجلسة والحساب.
يتفاعل المستخدمون غالبًا مع خدمات Google على أجهزة متعدّدة، مثل الهواتف أو أجهزة الكمبيوتر المكتبية أو الشاشات الذكية أو أجهزة التلفزيون. يؤدي تسجيل الدخول على كل منصة أو جهاز إلى إنشاء جلسة منفصلة. بالنسبة إلى عمليات تسجيل الدخول على الويب، يتم إنشاء جلسة بين المتصفّح المحدّد وGoogle. يُرجى العِلم أنّ وضع التصفّح المتخفي ووضع التصفّح الخاص ينشئان جلسات منفصلة ومعزولة. لهذا السبب، يمكن أن يتضمّن حساب Google واحد جلسات متعدّدة ومختلفة نشطة في الوقت نفسه على متصفّحات وأجهزة مختلفة. لمزيد من التفاصيل، يُرجى الاطّلاع على الاطّلاع على الأجهزة التي يمكنها الوصول إلى الحساب.
حالة حساب Google
الأحداث النموذجية لدورة حياة حساب Google هي:
- يختار أحد المستخدمين إنشاء حساب Google، ثم
- قد توقِف Google الحساب أو قد يعيد المستخدم تفعيله بعد اتّباع كيفية استرداد حسابك على Google أو Gmail، و
- قد يقرّر أحد المستخدمين حذف حسابك على Google أو قد تحذف Google الحساب بسبب سياسة حسابات Google غير النشطة.
تنطبق ميزات "حزمة الأمان" الموضّحة في هذا الدليل على الحسابات النشطة أو غير المفعّلة، ولكن لا تنطبق على أحداث إنشاء حساب Google أو حذفه.
قد توقِف Google حسابًا في أي وقت، وللاطّلاع على بعض الأسباب، يُرجى الرجوع إلى حسابك غير مفعّل. عند حدوث ذلك، يتم إنهاء أي جلسات نشطة على Google، وترسل خدمة "حماية عابرة للحساب" من Google حدث RISC. لا يمكن للحسابات غير المفعّلة استخدام ميزة "تسجيل الدخول باستخدام حساب Google"، ما يعني أنّه لا يتم إصدار رمز تعريف مطلقًا، وبالتالي لا يمكن استخدامه لرصد حسابات المستخدمين غير المفعّلة.
على الرغم من أنّ تلقّي أحداث "الحماية بين الحسابات" (RISC) هو أمر اختياري، فإنّ هذه الأحداث تعمل كإشارات مهمة لإدارة الجلسة بين المستخدم وتطبيقك وما إذا كان ذلك ممكنًا. توضّح مقالة حماية حسابات المستخدمين باستخدام خدمة "الحماية بين الحسابات" كيفية تنفيذ RISC والردّ على الأحداث.
الإعداد
لتلقّي المطالبات الإضافية، يجب نشر تطبيقك وإثبات ملكيته verified وتفعيل ميزات "حزمة الأمان". ابدأ بالتأكّد من أنّ تطبيقك منشور وتم إثبات ملكيته:
- افتح منصة مصادقة Google
- اختَر المشروع الخاص بتطبيقك أو أنشِئه
- انقر على الجمهور وتأكَّد من أنّ حالة النشر هي في مرحلة الإنتاج
- انقر على مركز إثبات الملكية وتأكَّد من أنّ حالة إثبات الملكية هي تم إثبات الملكية
بعد ذلك، فعِّل المطالبات الإضافية:
- انقر على الإعدادات في القائمة
- ضمن الإعدادات المتقدّمة ، اختَر:
- مطالبات مدة الجلسة لتفعيل
auth_time - مطالبات قوة المصادقة لتفعيل
amr
- مطالبات مدة الجلسة لتفعيل
لمزيد من المعلومات، يُرجى زيارة مركز مساعدة إثبات ملكية تطبيقات OAuth.
الميزات المتاحة
يصف هذا القسم الميزات الفردية التي تشكّل "حزمة الأمان".
مراجع طرق المصادقة
مراجع طرق المصادقة (amr) هي مطالبة في بروتوكول OpenID Connect تصف الطرق المستخدَمة أثناء آخر حدث مصادقة بين المستخدم وGoogle.
من بين قيم IANA.AMR المحتمَلة، تتيح Google القيم التالية التي تشير إلى:
hwkتم استخدام مفتاح أمان للأجهزةmfaتم إكمال المصادقة المتعدّدة العواملpwdتم استخدام كلمة مرورswkتم استخدام مفتاح برامج، مثل مفتاح مرورsmsتم استخدام رسالة قصيرة للتحقّقtelتم استخدام مكالمة هاتفية للتحقّق
يتم عرض إحدى هذه القيم أو أكثر كمصفوفة JSON من السلاسل ضمن مطالبة amr في رمز التعريف.
لا يتم تضمين مطالبة amr في رمز التعريف إلا عندما تتوفّر معلومات عن طريقة المصادقة المستخدَمة، وقد لا تكون متاحة حتى عند طلبها.
يمكن لمالكي حسابات Google اختيار طلب "التحقّق بخطوتين" وطرق "المصادقة المتعدّدة العوامل" التي يجب استخدامها.
عند تفعيل الحماية المتقدّمة على حساب Google، يجب استخدام طريقة قوية لـ "التحقّق بخطوتين"، مثل مفاتيح أمان Titan (hwk) أو مفتاح مرور (swk)، وهي مطلوبة. في كلتا الحالتَين، تظهر القيمة mfa عند استخدام أكثر من عامل واحد أثناء تسجيل الدخول إلى حساب Google.
يؤكّد ظهور mfa أنّ حدث المصادقة استوفى متطلبات Google لـ "المصادقة المتعدّدة العوامل". على سبيل المثال، تؤدي مصادقة حساب Google
باستخدام كلمة مرور (pwd) ومفتاح مرور (swk) إلى ظهور هذه
المطالبة "amr": ["mfa", "pwd", "swk"].
تحتوي هذه المراجع على مزيد من المعلومات حول أمان الحساب ومصادقة المستخدم: الحصول على أقوى مستوى أمان لحساب Google باستخدام برنامج الحماية المتقدّمة، تسجيل الدخول باستخدام مفتاح مرور بدلاً من كلمة مرور، و استخدام مفتاح أمان لميزة "التحقّق بخطوتين".
يتحكّم مشرفو Workspace في سياسة المصادقة لحسابات Workspace المُدارة، وقد يطلبون استخدام "المصادقة المتعدّدة العوامل" أو مفاتيح الأمان. لمزيد من المعلومات، يُرجى الاطّلاع على نظرة عامة على إدارة الهوية في Google و متطلبات "المصادقة المتعدّدة العوامل" في ما يتعلّق بإجراءات الحماية وعناصر التحكّم في تسجيل الدخول إلى Google Cloud.
وقت المصادقة
مطالبة auth_time هي جزء أساسي من بروتوكول OpenID Connect
الذي يوفّر معلومات حول آخر مرة صادق فيها المستخدم النهائي على هويته
لدى Google. وهي عبارة عن رقم JSON يمثّل عدد الثواني المنقضية منذ بداية حقبة يونكس (1 يناير 1970، الساعة 00:00:00 بالتوقيت العالمي المنسّق)، وهو الوقت الذي صادق فيه المستخدم على هويته آخر مرة. يمكنك اعتبارها طابعًا زمنيًا يشير إلى آخر حدث تسجيل دخول للمستخدم إلى حسابه على Google من الجهاز أو المتصفّح الحاليَين.
يتم تضمين هذه المطالبة في رمز التعريف، وهو رمز JSON على الويب (JWT) يحتوي على معلومات تم التحقّق منها حول المصادقة والمستخدم.
تُعدّ مطالبة auth_time قيّمة لتطبيقك لأنّها تتيح لك تحديد آخر مرة سجّل فيها المستخدم الدخول بنشاط إلى حساب Google على الجهاز أو المتصفّح الذي يستخدمه. يمكن أن يكون ذلك مهمًا بشكل خاص لأغراض الأمان، مثل:
اتّخاذ قرار مستنِد إلى معلومات حول ما إذا كان يجب أن يفرض تطبيقك تحديًا إضافيًا للمصادقة قبل تنفيذ إجراءات حساسة للمستخدم، مثل حذف الحساب أو تغيير طرق التواصل مع الحساب أو إجراء دفعة. لا تتيح Google طلبات إعادة المصادقة لحساب Google.
استخدام حداثة جلسة حساب Google الخاصة بالمستخدم وثباتها كإشارة ثقة. بشكل عام، تشير قيمة
auth_timeالحديثة إلى الحداثة، بينما تشير القيمة القديمة إلى الثبات.
بالنسبة إلى تطبيقات الويب، يشكّل مزيج متصفّح المستخدم ونظام التشغيل جلسة بعد أن يسجّل المستخدم الدخول إلى حسابه على Google.
بشكل مستقل، يحتفظ موقعك الإلكتروني أيضًا بجلسة مستخدم منفصلة. تشير قيمة auth_time الأحدث إلى أنّ المستخدم قد سجّل الدخول مؤخرًا إلى حسابه على Google.
غالبًا ما يشير ذلك إلى مستخدم نشط ومتفاعل، ويمكن تفسيره كإشارة إلى انخفاض المخاطر.
على منصات الأجهزة الجوّالة، مثل Android، يسجّل المستخدمون عادةً الدخول مباشرةً إلى أجهزتهم باستخدام طرق المقاييس الحيوية، مثل بصمة الإصبع أو فحص الوجه، وإلغاء قفل الجهاز باستخدام رقم التعريف الشخصي أو النقش. غالبًا ما تستخدم تطبيقات الأجهزة الجوّالة ومنصاتها طرق المصادقة المستندة إلى المنصة هذه بدلاً من إنشاء جلسة جديدة مع Google، ما يؤدي إلى تسجيل الدخول إلى حساب Google بشكل غير متكرّر وإجراء تعديلات مماثلة على auth_time. لذلك، قد تشير قيمة auth_time الحديثة هنا إلى تغيير في جلسة حساب Google طويلة الأمد، وبالتالي زيادة المخاطر.
إشارات الثقة هي موضوع دقيق. من المتوقّع استخدام auth_time مع إشارات أخرى، مثل ما إذا كانت ميزة "المصادقة المتعدّدة العوامل" مفعّلة وطريقة المصادقة المستخدَمة ومدة جلسة المستخدم بين تطبيقك ومنصتك.
الطلبات
تختلف الطريقة المحدّدة المستخدَمة لطلب المطالبتَين auth_time وamr حسب
واجهة برمجة التطبيقات المستخدَمة، ولكن تتضمّن كل واجهة برمجة تطبيقات مَعلمة claims اختيارية لـ
طلب auth_time وamr.
بروتوكول OIDC
عند استخدام منصة OAuth مباشرةً، اطلب auth_time من خلال إضافتها إلى مَعلمة الطلب claims الاختيارية. اضبط قيمة الحقل id_token
في عنصر JSON الخاص بالمطالبات على {"auth_time":{"essential":true}}.
وبالمثل، أضِف {"amr":{"essential":true}} إلى الـ claims لطلب amr:
https://accounts.google.com/o/oauth2/v2/auth? response_type=id_token& client_id=YOUR_CLIENT_ID& scope=openid email profile& redirect_uri=https://example.com/user-login& nonce=123-456-7890& claims={ "id_token": { "auth_time": { "essential":true }, "amr": {"essential":true} } }
لمزيد من المعلومات، يُرجى الاطّلاع على OpenID Connect.
مكتبة "تسجيل الدخول باستخدام حساب Google" على الويب
تحتوي مكتبة "تسجيل الدخول باستخدام حساب Google" على الويب على واجهتَي برمجة تطبيقات: HTML وJavaScript لطلب مطالبات إضافية. على سبيل المثال، اطلب auth_time وamr باستخدام واجهة برمجة التطبيقات JavaScript:
<html>
<body>
<script src="https://accounts.google.com/gsi/client" async></script>
<script>
window.onload = function () {
google.accounts.id.initialize({
client_id: "YOUR_WEB_CLIENT_ID",
callback: function(rsp) { console.log(rsp.credential); },
essential_claims: "auth_time, amr",
});
google.accounts.id.renderButton(
document.getElementById("buttonDiv"),
{ type: "standard", size: "large" }
);
}
</script>
<div id="buttonDiv"></div>
</body>
</html>لمزيد من المعلومات، يُرجى الاطّلاع على تسجيل الدخول باستخدام حساب Google على الويب.
مكتبة "تسجيل الدخول باستخدام حساب Google" على Android
تُستخدَم طريقة setClaims وعنصر Claim لطلب auth_time و
amr.
عدِّل تبعيات الإصدار لاستخدام أحدث إصدارَين من مكتبتَي androidx.credentials:credentials-play-services-auth وcom.google.android.libraries.identity.googleid:googleid.
أنشِئ كائنَي Claim من النوعَين auth_time وamr، باستخدام
setClaims لإضافتهما إلى قائمة خيارات تسجيل الدخول:
val googleIdOption: GetGoogleIdOption = GetGoogleIdOption.Builder() .setAutoSelectEnabled(true) .setFilterByAuthorizedAccounts(true) .setServerClientId(WEB_CLIENT_ID) .setNonce("NONCE") .setClaims(ImmutableList.of( new Claim("auth_time", true), new Claim("amr", true) )) .build()
لمزيد من المعلومات، يُرجى الاطّلاع على مصادقة المستخدمين باستخدام ميزة "تسجيل الدخول باستخدام حساب Google".
iOS
تضيف حزمة تطوير البرامج (SDK) لميزة "تسجيل الدخول باستخدام حساب Google" على iOS كائن authTimeClaim ومَعلمة claims إلى فئة GIDSignIn المستخدَمة لطلب auth_time وamr بشكل اختياري.
تعدِّل التطبيقات التي تستخدم ASWebAuthenticationSession ملفًا مشتركًا على مستوى الجهاز لملفات تعريف الارتباط. تستخدم GIDSignIn هذه الطريقة تلقائيًا في iOS 12 أو الإصدارات الأحدث وmacOS 10.15 أو الإصدارات الأحدث. في هذا السيناريو، تتم مصادقة مستخدم يسجّل الدخول إلى حسابه على Google ويتم تخزين الجلسة في ملف تعريف الارتباط المشترك.
هنا، auth_time هي آخر عملية مصادقة للمستخدم على Google على الجهاز، وليس فقط داخل تطبيقك.
تعمل كل من SFSafariViewController وWKWebView وUIWebView في بيئات معزولة ضمن تطبيقك، لذا تجنَّب استخدامها عند استخدام auth_time. هنا، auth_time هي آخر عملية تسجيل دخول للمستخدم إلى التطبيق نفسه، وبما أنّ القيمة تكون حديثة دائمًا، تكون أقل أهمية.
لطلب auth_time، عدِّل تبعيات GoogleSignIn إلى أحدث
إصدار وأنشِئ كائن authTimeClaim، وأضِفه إلى مجموعة claims.
لطلب amr، أنشِئ كائن amrClaim وأضِفه إلى مجموعة claims.
Swift
أضِف مجموعة المطالبات إلى طريقة GIDSignIn.sharedInstance.signIn:
let authTimeClaim = GIDClaim.authTime() let amrClaim = GIDClaim.amr() let claims = Set([authTimeClaim, amrClaim])// Start the sign-in process GIDSignIn.sharedInstance.signIn( withPresenting: rootViewController, claims: claims ) { signInResult, error in guard let result = signInResult else { print("Error signing in: (error?.localizedDescription ?? "No error description")") return } // If sign in succeeded, display the app's main content View print("ID Token: (result.user.idToken?.tokenString ?? "No token")") }
Objective-C
أضِف مجموعة المطالبات إلى طريقة signInWithPresentingViewController:
GIDClaim *authTimeClaim = [GIDClaim authTimeClaim]; GIDClaim *AMRClaim = [GIDClaim AMRClaim]; NSSet *claims = [NSSet setWithArray:@[authTimeClaim, AMRClaim]];// Include the claims set and start the sign-in process [GIDSignIn.sharedInstance signInWithPresentingViewController:self hint:nil claims:claims completion:^(GIDSignInResult * _Nullable signInResult, NSError * _Nullable error) { // On success signInResult.user.idToken // contains the requested claims. }];
لمزيد من المعلومات، يُرجى الاطّلاع على دمج ميزة "تسجيل الدخول باستخدام حساب Google" في تطبيقك على iOS أو macOS.
الردود
عند تضمين المطالبتَين auth_time أو amr في الطلب، يتم عرضهما في استجابة حمولة رمز التعريف إلى جانب المطالبات العادية الأخرى، مثل iss (الجهة المُصدرة) وsub (الموضوع) وaud (الجمهور) وexp (وقت انتهاء الصلاحية).
من المحتمل أن تكون المطالبات غير المتاحة ناتجة عن عدم إثبات ملكية التطبيق أو عن إيقاف الإعدادات الإضافية، وهو الإعداد التلقائي. اتّبِع التعليمات الواردة في الإعداد للتأكّد من أنّ معرّف العميل والتطبيق المستخدَمَين تم إثبات ملكيتهما وتم تفعيل المطالبات الإضافية.
قيمة مطالبة auth_time هي رقم JSON يمثّل عدد الثواني المنقضية منذ بداية حقبة يونكس (1 يناير 1970، الساعة 00:00:00 بالتوقيت العالمي المنسّق) حتى آخر مرة صادق فيها المستخدم على هويته.
قيمة مطالبة amr هي مصفوفة JSON من السلاسل التي تمثّل طرق المصادقة المستخدَمة أثناء آخر حدث تسجيل دخول إلى حساب Google.
في ما يلي مثال على رمز تعريف تم فك ترميزه ويتضمّن المطالبتَين auth_time وamr:
{ "iss": "https://accounts.google.com", "azp": "YOUR_CLIENT_ID", "aud": "YOUR_CLIENT_ID", "sub": "117726431651943698600", "email": "alice@example.com", "email_verified": true, "nonce": "123-456-7890", "auth_time": 1748875426, "amr": ["mfa", "pwd", "tel"], "nbf": 1748880889, "name": "Elisa Beckett", "picture": "https://lh3.googleusercontent.com/a/default-user=s96-c", "given_name": "Elisa", "family_name": "Beckett", "iat": 1748881189, "exp": 1748884789, "jti": "8b5d7ce345787d5dbf14ce6e08a8f88ee8c9b5b1" }
يحتوي رمز التعريف أيضًا على مطالبة iat (تم الإصدار في)، التي تشير إلى وقت إصدار رمز JWT. من خلال مقارنة المطالبتَين iat وauth_time، يمكنك تحديد الوقت المنقضي منذ آخر عملية مصادقة للمستخدم مقارنةً بوقت إنشاء رمز التعريف المحدّد. على سبيل المثال، إذا كانت قيمة iat هي 1748881189 وقيمة auth_time هي 1748875426، يكون الفرق 5763 ثانية، ما يمثّل ساعة واحدة و36 دقيقة و3 ثوانٍ من الوقت المنقضي.