حزمة الأمان

يصف هذا الدليل مجموعة من الميزات التي تعرض إشارات ثقة إضافية حول حساب Google. تساعد إشارات الثقة هذه نظام إدارة الحساب في اتّخاذ قرارات مستندة إلى المخاطر أثناء عملية الاشتراك وإنشاء الحساب، وكذلك للمستخدمين العائدين لاحقًا.

الإعداد

لتلقّي مطالبات إضافية، يجب نشر تطبيقك وإثبات ملكيته وتفعيل ميزات حزمة الأمان.

للتأكّد من نشر تطبيقك وإثبات ملكيته، اتّبِع الخطوات التالية:

  1. افتح منصة Google Auth
  2. اختيار مشروع لتطبيقك أو إنشاؤه
  3. انقر على الجمهور في القائمة.
  4. تأكَّد من أنّ حالة النشر هي في مرحلة الإنتاج
  5. انقر على مركز التحقّق في القائمة.
  6. تأكَّد من أنّ حالة إثبات الملكية هي تم إثبات الملكية.

    لمزيد من المعلومات، يُرجى الانتقال إلى مركز المساعدة بشأن التحقّق من تطبيقات OAuth.

لتفعيل المطالبة auth_time، اتّبِع الخطوات التالية:

  1. افتح منصة Google Auth
  2. اختيار مشروع لتطبيقك أو إنشاؤه
  3. انقر على الإعدادات في القائمة
  4. ضمن الإعدادات المتقدّمة، اختَر مطالبات عمر الجلسة لتفعيل auth_time.

الميزات المتاحة

يوضّح هذا القسم الميزات الفردية التي تشكّل "حزمة الأمان".

auth_time

إنّ بيان auth_time هو جزء أساسي من بروتوكول OpenID Connect الذي يوفّر معلومات حول آخر مرة تمت فيها مصادقة المستخدم النهائي مع Google. وهو رقم بتنسيق JSON يمثّل عدد الثواني التي انقضت منذ بداية حقبة Unix (1 يناير 1970، الساعة 00:00:00 بالتوقيت العالمي المتفق عليه)، وهو الوقت الذي تمت فيه آخر مصادقة للمستخدم. يمكنك اعتبارها طابعًا زمنيًا يشير إلى آخر مرة سجّل فيها المستخدم الدخول إلى حسابه على Google من الجهاز أو المتصفّح الحالي. يتم تضمين هذه المطالبة في رمز التعريف المميز، وهو رمز ويب مميز بتنسيق JSON يحتوي على معلومات تم التحقّق منها حول المصادقة والمستخدم.

تكون مطالبة auth_time مفيدة لتطبيقك لأنّها تتيح لك تحديد آخر مرة سجّل فيها المستخدم الدخول بنشاط إلى حساب Google على الجهاز أو المتصفّح الذي يستخدمه. قد يكون هذا الأمر مهمًا بشكل خاص لأغراض أمنية، مثل:

  • اتّخاذ قرار مدروس بشأن ما إذا كان تطبيقك سيطلب إجراء خطوة إضافية للتحقّق من الهوية قبل تنفيذ إجراءات حسّاسة من قِبل المستخدم، مثل حذف الحساب أو تغيير طرق التواصل مع الحساب أو إجراء دفعة لا تتيح Google طلبات إعادة المصادقة على حساب Google.

  • استخدام مدى حداثة جلسة حساب Google للمستخدم ومدى استقرارها كإشارة ثقة بشكل عام، تشير قيمة auth_time الحديثة إلى حداثة المحتوى، بينما تشير القيمة القديمة إلى ثباته.

بالنسبة إلى تطبيقات الويب، يشكّل مزيج متصفح المستخدم ونظام التشغيل جلسة بعد أن يسجّل المستخدم الدخول إلى حسابه على Google. بشكلٍ مستقل، يحتفظ موقعك الإلكتروني أيضًا بجلسة مستخدم منفصلة. تشير القيمة الأحدث auth_time إلى أنّ المستخدم سجّل الدخول إلى حسابه على Google مؤخرًا. ويشير ذلك غالبًا إلى أنّ المستخدم نشط ويتفاعل مع التطبيق، ويمكن تفسيره كإشارة إلى انخفاض مستوى المخاطر.

على المنصات المتوافقة مع الأجهزة الجوّالة، مثل Android، يسجّل المستخدمون الدخول عادةً إلى أجهزتهم مباشرةً باستخدام طرق مصادقة بيومترية، مثل بصمة الإصبع أو المسح الضوئي للوجه، ورقم التعريف الشخصي أو النقش الخاصين بالجهاز. تستخدم التطبيقات والمنصات على الأجهزة الجوّالة غالبًا طرق المصادقة المستندة إلى المنصة بدلاً من إنشاء جلسة جديدة باستخدام Google، ما يؤدي إلى تسجيل الدخول إلى حساب Google بشكل غير متكرّر وإجراء تعديلات مقابلة على auth_time. لذا، قد تشير قيمة auth_time حديثة إلى تغيير في جلسة حساب Google طويلة الأمد، وبالتالي زيادة في المخاطر.

موضوع إشارات الثقة معقّد. من المتوقّع استخدام auth_time مع إشارات أخرى، مثل ما إذا كانت المصادقة المتعدّدة العوامل (MFA) مفعّلة، وطريقة المصادقة المستخدَمة، ومدة جلسة المستخدم بين تطبيقك ومنصتك.

طلب auth_time

تختلف الطريقة المحدّدة المستخدَمة لطلب بيان auth_time حسب واجهة برمجة التطبيقات المستخدَمة، ولكن تتضمّن كل واجهة برمجة تطبيقات مَعلمة اختيارية claims لطلب auth_time.

بروتوكول OIDC

عند استخدام "منصة OAuth" مباشرةً، اطلب auth_time من خلال إضافته إلى مَعلمة طلب البيانات الاختيارية. اضبط قيمة الحقل id_token في عنصر JSON الخاص بالمطالبات على {"auth_time":{"essential":true}}. على سبيل المثال،

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}}}

لمزيد من المعلومات، يُرجى الاطّلاع على OpenID Connect.

GIS for Web

تتضمّن مكتبة "تسجيل الدخول باستخدام Google" للويب واجهتَي برمجة تطبيقات: HTML وJavaScript لطلب مطالبات إضافية. على سبيل المثال، اطلب auth_time باستخدام JavaScript API:

<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",
      });
      google.accounts.id.renderButton(
        document.getElementById("buttonDiv"),
        { type: "standard", size: "large" }
      );
    }
  </script>
  <div id="buttonDiv"></div>
</body>
</html>

لمزيد من المعلومات، يُرجى الاطّلاع على مقالة تسجيل الدخول باستخدام Google على الويب.

GIS for Android

يتم استخدام طريقة setClaims وعنصر Claim لطلب auth_time.

يجب تعديل عناصر إنشاء التطبيق لتستخدِم أحدث إصدارات المكتبتَين androidx.credentials:credentials-play-services-auth وcom.google.android.libraries.identity.googleid:googleid.

أنشئ عنصر Claim من النوع auth_time، باستخدام setClaims لإضافته إلى خيارات تسجيل الدخول:

val googleIdOption: GetGoogleIdOption = GetGoogleIdOption.Builder()
    .setAutoSelectEnabled(true)
    .setFilterByAuthorizedAccounts(true)
    .setServerClientId(WEB_CLIENT_ID)
    .setNonce("NONCE")
    .setClaims(ImmutableList.of(new Claim("auth_time", true)))
    .build()

لمزيد من المعلومات، يُرجى الاطّلاع على إجراء مصادقة للمستخدمين باستخدام ميزة "تسجيل الدخول باستخدام حساب Google".

auth_time response

عند تضمين مطالبة auth_time في الطلب، تظهر في حمولة الردّ على الرمز المميّز لتعريف الهوية إلى جانب المطالبات العادية الأخرى، مثل iss (الجهة المصدرة) وsub (الموضوع) وaud (الجمهور) وexp (وقت انتهاء الصلاحية). قيمة المطالبة auth_time هي رقم JSON يمثّل عدد الثواني التي انقضت منذ بداية حقبة Unix (1 يناير 1970، الساعة 00:00:00 بالتوقيت العالمي المنسق) حتى وقت آخر مصادقة للمستخدم. في ما يلي مثال على رمز مميّز صالح تم فك ترميزه ويتضمّن مطالبة auth_time:

{
  "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,
  "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 ثوانٍ من الوقت المنقضي.