الحفاظ على اتساق بيانات الاعتماد مع موفّري بيانات الاعتماد

عندما ينشئ المستخدم مفتاح مرور، يحفظ خادم الطرف المعتمِد تفاصيل معيّنة، بينما يحفظ مقدّم بيانات الاعتماد، مثل "مدير كلمات المرور في Google"، تفاصيل أخرى. وعلى وجه التحديد:

  • يحفظ خادم الطرف المعتمِد بيانات اعتماد المفتاح العام.
  • يحفظ موفِّر بيانات الاعتماد اسم المستخدم والاسم المعروض والمفتاح الخاص والبيانات الوصفية الأخرى المرتبطة به. تساعد هذه البيانات الوصفية المستخدمين في تحديد مفتاح المرور المطلوب واختياره أثناء تسجيل الدخول.

قد يؤدي عدم الاتساق المحتمل بين البيانات المحفوظة على خادم الجهة المعتمدة وموفّر بيانات الاعتماد إلى تجارب سيئة للمستخدمين. قد تنشأ مشاكل في السيناريوهات التالية:

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

تتيح Signal API في Credential Manager للجهات المعتمِدة التواصل مع مزوّدي بيانات الاعتماد لحذف بيانات الاعتماد وتعديل البيانات الوصفية للمستخدم، مثل اسم المستخدم والاسم المعروض. هناك ثلاثة أنواع من الطلبات المتاحة لسيناريوهات مختلفة:

  • SignalUnknownCredentialRequest

    • تشير هذه الحالة إلى أنّ بيانات اعتماد معيّنة لم تعُد صالحة ويجب إخفاؤها أو إزالتها من موفّر بيانات الاعتماد.
  • SignalAllAcceptedCredentialIdsRequest

    • توفّر هذه السياسة قائمة بأرقام تعريف بيانات الاعتماد المقبولة لموفّر بيانات الاعتماد.
  • SignalCurrentUserDetailsRequest

    • تعديل تفاصيل البيانات الوصفية للمستخدم

التوافق مع الإصدارات

تتوفّر واجهة Signal API على الأجهزة التي تعمل بنظام التشغيل Android 15 أو الإصدارات الأحدث، وهي متاحة بدءًا من الإصدار 1.6.0-beta03 من مكتبة androidx.credentials.

التنفيذ

لاستخدام Signal API، اتّبِع الخطوات التالية:

  1. أضِف تبعية Credential Manager إلى مشروعك.

    Kotlin

    dependencies {
        implementation("androidx.credentials:credentials:1.7.0-alpha02")
    }

    Groovy

    dependencies {
        implementation "androidx.credentials:credentials:1.7.0-alpha02"
    }

  2. استدعاء Signal API

    لإرسال طلب إشارة إلى موفّر بيانات الاعتماد، استخدِم طلب إشارة متوافقًا. يتطلّب كل نوع من أنواع طلبات الإشارات طلب JSON، كما هو موضّح في الأمثلة التالية:

    • بيانات اعتماد غير معروفة (SignalUnknownCredentialRequest)

      استخدِم SignalUnknownCredentialRequest للإشارة إلى أنّ بيانات الاعتماد مرفوضة وغير معروفة. عندما يتلقّى مزوّد بيانات الاعتماد هذه الإشارة، يخفي بيانات الاعتماد أو يحذفها.

      الاستخدام

      يمكنك استخدام هذه الإشارة عندما يتعذّر على الجهة المعتمدة التحقّق من تأكيد مفتاح المرور. ويعني ذلك أنّ مفتاح المرور غير صالح ويجب إخفاؤه أو إزالته من قِبل مزوّد بيانات الاعتماد.

      مَعلمات JSON المطلوبة لهذا الطلب هي rpId وcredentialId. لمزيد من المعلومات حول بنية JSON، يُرجى الاطّلاع على خيارات signalUnknownCredential.

      credentialManager.signalCredentialState(
          SignalUnknownCredentialRequest(
              requestJson = JSONObject().apply {
                  put("rpId", rpId /* [String] RP ID of the relying party */)
                  put("credentialId", credentialId /* [String] Credential ID of the credential to be hidden or deleted */)
              }.toString()
          )
      )
      
    • جميع بيانات الاعتماد المقبولة (SignalAllAcceptedCredentialIdsRequest)

      استخدِم SignalAllAcceptedCredentialIdsRequest لإرسال إشعار إلى مزوّدي بيانات الاعتماد يتضمّن مجموعة بيانات الاعتماد المقبولة. بعد تلقّي الإشارة، يخفي مزوّد بيانات الاعتماد أو يحذف أي بيانات اعتماد غير مضمّنة في هذه القائمة، أو يُظهر أي بيانات اعتماد مخفية سابقًا ومضمّنة الآن في القائمة.

      الاستخدام

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

      مَعلمات JSON المطلوبة لهذا الطلب هي rpId وuserId وallAcceptedCredentialIds. لمزيد من المعلومات حول بنية JSON، يُرجى الاطّلاع على خيارات signalAllAcceptedCredential.

      credentialManager.signalCredentialState(
          SignalAllAcceptedCredentialIdsRequest(
              requestJson = JSONObject().apply {
                  put("rpId", rpId /* [String] RP ID of the relying party */)
                  put("userId", userId /* [String] User ID of the current user */)
                  put(
                      "allAcceptedCredentialIds",
                      JSONArray(credentialIdsList /* [List<String>] List of accepted Credential IDs */)
                  )
              }.toString()
          )
      )
      
    • تفاصيل المستخدم الحالي (SignalCurrentUserDetailsRequest)

      يمكنك استخدام SignalCurrentUserDetailsRequest لإعلام مزوّدي بيانات الاعتماد بأنّه تم تعديل البيانات الوصفية، مثل اسم المستخدم والاسم المعروض لمستخدم معيّن، وأنّه يجب أن تظهر في مزوّد بيانات الاعتماد.

      الاستخدام

      يمكنك استخدام هذه الإشارة عندما يعدّل المستخدم أو الجهة المعتمدة البيانات الوصفية لمفتاح المرور المرتبط بحساب المستخدم.

      مَعلمات JSON المطلوبة لهذا الطلب هي rpId وuserId وname وdisplayName. لمزيد من المعلومات حول بنية JSON، يُرجى الاطّلاع على خيارات signalCurrentUserDetails.

      credentialManager.signalCredentialState(
          SignalCurrentUserDetailsRequest(
              requestJson = JSONObject().apply {
                  put("rpId", rpId /* [String] RP ID of the relying party */)
                  put("userId", userId /* [String] User ID of the current user */)
                  put("name", name /* [String] New Name to be updated for the current user */)
                  put("displayName", displayName /* [String] New display name to be updated for the current user */)
              }.toString()
          )
      )
      

اختبار عملية التنفيذ

لاختبار عملية تنفيذ Signal API، أكمِل الخطوات التالية:

  1. ثبِّت نموذج مزوّد بيانات الاعتماد باسم MyVault.

  2. فعِّل MyVault كموفِّر بيانات اعتماد من خلال الانتقال إلى الإعدادات > كلمات المرور ومفاتيح المرور والحسابات > الخدمة المفضّلة.

    قائمة &quot;الخدمة المفضّلة&quot; (Preferred Service) في إعدادات Android، والتي تعرض MyVault مفعَّلاً كمقدّم بيانات اعتماد

  3. فعِّل جميع الإشعارات لتطبيق MyVault في الإعدادات > التطبيقات > MyVault > الإشعارات.

    قائمة &quot;الإشعارات&quot; في تطبيق MyVault، والتي تعرض جميع الإشعارات المفعَّلة

  4. تأكَّد من تفعيل خيار الظهور على الشاشة للإشعارات في الإعدادات > التطبيقات > MyVault > الإشعارات > الفئات > قناة إشعارات Signal API.

    إعدادات قناة الإشعارات في Signal API لتطبيق MyVault، مع تفعيل خيار &quot;الظهور على الشاشة&quot;

  5. في تطبيقك، يمكنك تفعيل المسارات التي ترسل طلبات الإشارات إلى مقدّم بيانات الاعتماد. من المفترض أن تظهر لك إشعارات من MyVault على الشاشة. يؤكّد ذلك أنّ مزوّد بيانات الاعتماد قد تلقّى الطلبات.