حزمة الأمان

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

الإعداد

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

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

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

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

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

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

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

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

auth_time

إنّ 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 مع إشارات أخرى، مثل ما إذا كانت المصادقة المتعدّدة العوامل (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 لأجهزة 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".

iOS

تضيف حزمة تطوير البرامج (SDK) الخاصة بخدمة &quot;تسجيل الدخول باستخدام Google&quot; لنظام التشغيل iOS الكائن authTimeClaim والمعلَمة claims إلى الفئة GIDSignIn المستخدَمة لطلب auth_time بشكل اختياري.

تعدّل التطبيقات التي تستخدم ASWebAuthenticationSession حزمة ملفات تعريف ارتباط مشتركة على مستوى الجهاز. يستخدم تطبيق GIDSignIn هذه الطريقة تلقائيًا في نظام التشغيل iOS 12 أو الإصدارات الأحدث وmacOS 12.16 أو الإصدارات الأحدث. في هذا السيناريو، تتم المصادقة على مستخدم يسجّل الدخول إلى حسابه على Google، ويتم تخزين الجلسة في حاوية ملفات تعريف الارتباط المشتركة. يمثّل هذا الحقل auth_time آخر عملية مصادقة للمستخدم على Google على الجهاز، وليس داخل تطبيقك فقط.

تعمل "SFSafariViewController" و"WKWebView" و"UIWebView" في بيئات معزولة ضمن تطبيقك، لذا تجنَّب استخدامها عند استخدام auth_time. يمثّل هذا الحقل auth_time آخر تسجيل دخول للمستخدم إلى التطبيق نفسه، وبما أنّ القيمة تكون دائمًا حديثة، فإنّها تكون أقل أهمية.

لطلب auth_time، عليك تعديل GoogleSignIn dependencies إلى أحدث إصدار وإنشاء عنصر authTimeClaim وإضافته إلى مجموعة claims.

Swift

أضِف مجموعة المطالبات إلى طريقة GIDSignIn.sharedInstance.signIn:

let authTimeClaim = GIDClaim.authTime()
let claims = Set([authTimeClaim])

// 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];
NSSet *claims = [NSSet setWithObject:authTimeClaim];

// 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. }];

لمزيد من المعلومات، يُرجى الاطّلاع على دمج خدمة &quot;تسجيل الدخول باستخدام Google&quot; في تطبيق iOS أو macOS.

auth_time response

عند تضمين مطالبة auth_time في الطلب، تظهر في ردّ حمولة الرمز المميّز لتعريف الهوية إلى جانب المطالبات العادية الأخرى، مثل iss (الجهة المصدرة) وsub (الموضوع) وaud (الجمهور) وexp (وقت انتهاء الصلاحية). قيمة المطالبة auth_time هي رقم JSON يمثّل عدد الثواني التي انقضت منذ بداية حقبة يونكس (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 ثوانٍ من الوقت المنقضي.