إضافة مصادقة إلى تطبيق نماذج Xamarin

نظرة عامة

يوضح لك هذا الموضوع كيفية مصادقة مستخدمي تطبيق Mobile Service من تطبيق العميل. في هذا البرنامج التعليمي، يمكنك إضافة مصادقة إلى مشروع التشغيل السريع لنماذج Xamarin باستخدام موفر هوية مدعوم من قبل App Service. بعد المصادقة والتصريح بنجاح بواسطة تطبيق الجوال الخاص بك، يتم عرض قيمة معرف المستخدم، وستتمكن من الوصول إلى بيانات الجدول المقيدة.

المتطلبات الأساسية

للحصول على أفضل نتيجة مع هذا البرنامج التعليمي، نوصي أولا بإكمال البرنامج التعليمي لتطبيق إنشاء نماذج Xamarin . بعد إكمال هذا البرنامج التعليمي ، سيكون لديك مشروع نماذج Xamarin وهو تطبيق TodoList متعدد المنصات.

إذا لم تستخدم مشروع خادم البدء السريع الذي تم تنزيله، فيجب إضافة حزمة ملحق المصادقة إلى مشروعك. لمزيد من المعلومات حول حزم ملحقات الخادم، راجع العمل مع حزمة SDK لخادم الواجهة الخلفية .NET لتطبيقات Azure للأجهزة المحمولة.

تسجيل تطبيقك للمصادقة وتكوين خدمات التطبيق

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

  1. قم بتكوين موفر الهوية المفضل لديك باتباع الإرشادات الخاصة بالموفر:

  2. كرر الخطوات السابقة لكل موفر تريد دعمه في تطبيقك.

إضافة تطبيقك إلى عناوين URL المسموح بها لإعادة التوجيه الخارجي

تتطلب المصادقة الآمنة تحديد نظام عنوان URL جديد لتطبيقك. يسمح ذلك لنظام المصادقة بإعادة التوجيه مرة أخرى إلى تطبيقك بمجرد اكتمال عملية المصادقة. في هذا البرنامج التعليمي ، نستخدم اسم تطبيق مخطط عنوان URL طوال الوقت. ومع ذلك، يمكنك استخدام أي نظام عناوين URL تختاره. يجب أن تكون فريدة من نوعها لتطبيق الهاتف المحمول الخاص بك. لتمكين إعادة التوجيه على جانب الخادم:

  1. في مدخل Azure، حدد خدمة التطبيقات.

  2. انقر على خيار قائمة المصادقة / التفويض .

  3. في عناوين URL لإعادة التوجيه الخارجي المسموح بها، أدخل url_scheme_of_your_app://easyauth.callback. url_scheme_of_your_app في هذه السلسلة هو مخطط عنوان URL لتطبيق الهاتف المحمول الخاص بك. يجب أن يتبع مواصفات عنوان URL العادية للبروتوكول (استخدم الأحرف والأرقام فقط ، وابدأ بحرف). يجب عليك تدوين السلسلة التي تختارها حيث ستحتاج إلى ضبط رمز تطبيق الهاتف المحمول الخاص بك باستخدام مخطط عنوان URL في عدة أماكن.

  4. انقر فوق موافق.

  5. اضغط على حفظ .

تقييد الأذونات للمستخدمين المصادق عليهم

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

  • Node.js الخلفية (عبر بوابة Azure):

    في إعدادات تطبيقات الجوال، انقر فوق جداول سهلة وحدد الجدول. انقر فوق تغيير الأذونات، وحدد الوصول المصادق عليه لكافة الأذونات فقط، ثم انقر فوق حفظ.

  • نهاية خلفية .NET (C #):

    في مشروع الخادم، انتقل إلى ControllersTodoItemController>.cs. إضافة السمة [Authorize] إلى فئة TodoItemController كما يلي. لتقييد الوصول إلى طرق محددة فقط، يمكنك أيضا تطبيق هذه السمة فقط على هذه الطرق بدلا من الفصل. إعادة نشر مشروع الخادم.

      [Authorize]
      public class TodoItemController : TableController<TodoItem>
    
  • Node.js الخلفية (عبر رمز Node.js):

    لطلب المصادقة للوصول إلى الجدول، أضف السطر التالي إلى البرنامج النصي لخادم Node.js:

      table.access = 'authenticated';
    

    لمزيد من التفاصيل، راجع كيفية: طلب المصادقة للوصول إلى الجداول. لمعرفة كيفية تنزيل مشروع رمز التشغيل السريع من موقعك، راجع كيفية: تنزيل مشروع شفرة التشغيل السريع للواجهة الخلفية Node.js باستخدام Git.

إضافة مصادقة إلى مكتبة الفئات المحمولة

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

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

قم بتنفيذ واجهة IAuthenticate لكل نظام أساسي يدعمه تطبيقك.

  1. في Visual Studio أو Xamarin Studio ، افتح App.cs من المشروع مع Portable في الاسم ، وهو مشروع مكتبة الفئة المحمولة ، ثم أضف العبارة التاليةusing:

     ```csharp
     using System.Threading.Tasks;
     ```
    
  2. في التطبيق.cs، أضف تعريف الواجهة التالي IAuthenticate مباشرة قبل تعريف الفئة App .

     ```csharp
     public interface IAuthenticate
     {
         Task<bool> Authenticate();
     }
     ```
    
  3. لتهيئة الواجهة باستخدام تطبيق خاص بالنظام الأساسي، أضف الأعضاء الثابتين التاليين إلى فئة التطبيقات .

     ```csharp
     public static IAuthenticate Authenticator { get; private set; }
    
     public static void Init(IAuthenticate authenticator)
     {
         Authenticator = authenticator;
     }
     ```
    
  4. افتح TodoList.xaml من مشروع مكتبة الفئات المحمولة ، أضف عنصر الزر التالي في عنصر تخطيط buttonsPanel ، بعد الزر الموجود:

     ```xml
       <Button x:Name="loginButton" Text="Sign-in" MinimumHeightRequest="30"
         Clicked="loginButton_Clicked"/>
     ```
    

    يؤدي هذا الزر إلى تشغيل المصادقة المدارة من قبل الخادم باستخدام الواجهة الخلفية لتطبيق الجوال.

  5. افتح TodoList.xaml.cs من مشروع مكتبة الفئات المحمولة، ثم أضف الحقل التالي إلى الفصل TodoList :

     ```csharp
     // Track whether the user has authenticated.
     bool authenticated = false;
     ```
    
  6. استبدال الأسلوب OnAppeared بالتعليمة البرمجية التالية:

     ```csharp
     protected override async void OnAppearing()
     {
         base.OnAppearing();
    
         // Refresh items only when authenticated.
         if (authenticated == true)
         {
             // Set syncItems to true in order to synchronize the data
             // on startup when running in offline mode.
             await RefreshItems(true, syncItems: false);
    
             // Hide the Sign-in button.
             this.loginButton.IsVisible = false;
         }
     }
     ```
    

    يضمن هذا الرمز تحديث البيانات من الخدمة فقط بعد مصادقتك.

  7. إضافة المعالج التالي للحدث النقر إلى فئة TodoList :

     ```csharp
     async void loginButton_Clicked(object sender, EventArgs e)
     {
         if (App.Authenticator != null)
             authenticated = await App.Authenticator.Authenticate();
    
         // Set syncItems to true to synchronize the data on startup when offline is enabled.
         if (authenticated == true)
             await RefreshItems(true, syncItems: false);
     }
     ```
    
  8. احفظ التغييرات التي أجريتها وأعد إنشاء مشروع مكتبة الفئات المحمولة للتحقق من عدم وجود أخطاء.

إضافة مصادقة إلى تطبيق Android

يوضح هذا القسم كيفية تنفيذ واجهة IAuthenticate في مشروع تطبيق Android. تخطى هذا القسم إذا كنت لا تدعم أجهزة Android.

  1. في Visual Studio أو Xamarin Studio، انقر بزر الماوس الأيمن فوق مشروع droid، ثم قم بتعيين كبدء تشغيل Project.

  2. اضغط على F5 لبدء المشروع في مصحح الأخطاء، ثم تحقق من رفع استثناء غير معالج برمز حالة 401 (غير مصرح به) بعد بدء تشغيل التطبيق. يتم إنتاج رمز 401 لأن الوصول على الواجهة الخلفية يقتصر على المستخدمين المصرح لهم فقط.

  3. افتح MainActivity.cs في مشروع Android وأضف العبارات التالية using :

     ```csharp
     using Microsoft.WindowsAzure.MobileServices;
     using System.Threading.Tasks;
     ```
    
  4. تحديث فئة MainActivity لتنفيذ واجهة IAuthenticate ، كما يلي:

     ```csharp
     public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity, IAuthenticate
     ```
    
  5. قم بتحديث فئة MainActivity عن طريق إضافة حقل MobileServiceUser وطريقة مصادقة ، وهو أمر مطلوب بواسطة واجهة IAuthenticate ، كما يلي:

     ```csharp
     // Define an authenticated user.
     private MobileServiceUser user;
    
     public async Task<bool> Authenticate()
     {
         var success = false;
         var message = string.Empty;
         try
         {
             // Sign in with Facebook login using a server-managed flow.
             user = await TodoItemManager.DefaultManager.CurrentClient.LoginAsync(this, 
                 MobileServiceAuthenticationProvider.Facebook, "{url_scheme_of_your_app}");
             if (user != null)
             {
                 message = string.Format("you are now signed-in as {0}.",
                     user.UserId);
                 success = true;
             }
         }
         catch (Exception ex)
         {
             message = ex.Message;
         }
    
         // Display the success or failure message.
         AlertDialog.Builder builder = new AlertDialog.Builder(this);
         builder.SetMessage(message);
         builder.SetTitle("Sign-in result");
         builder.Create().Show();
    
         return success;
     }
    
     public override void OnResume()
     {
         base.OnResume();
         Xamarin.Essentials.Platform.OnResume();
     }
     ```
    

    إذا كنت تستخدم موفر هوية آخر غير فيسبوك، فاختر قيمة مختلفة ل MobileServiceAuthenticationProvider.

  6. قم بتحديث ملف AndroidManifest.xml عن طريق إضافة XML التالي داخل العنصر <application> :

    <activity android:name="com.microsoft.windowsazure.mobileservices.authentication.RedirectUrlActivity" android:launchMode="singleTop" android:noHistory="true">
      <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="{url_scheme_of_your_app}" android:host="easyauth.callback" />
      </intent-filter>
    </activity>
    

    استبدل {url_scheme_of_your_app} بمخطط عنوان URL.

  7. قم بإضافة التعليمة البرمجية التالية إلى الأسلوب OnCreate من فئة MainActivity قبل استدعاء إلى LoadApplication():

     ```csharp
     // Initialize the authenticator before loading the app.
     App.Init((IAuthenticate)this);
     ```
    

    يضمن هذا الرمز تهيئة المصادقة قبل تحميل التطبيق.

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

استكشاف الأخطاء وإصلاحها

تعطل التطبيق مع Java.Lang.NoSuchMethodError: No static method startActivity

في بعض الحالات، يتم عرض التعارضات في حزم الدعم كمجرد تحذير في Visual studio، ولكن تعطل التطبيق مع هذا الاستثناء في وقت التشغيل. في هذه الحالة ، تحتاج إلى التأكد من أن جميع حزم الدعم المشار إليها في مشروعك لها نفس الإصدار. تعتمد Xamarin.Android.Support.CustomTabsحزمة NuGet لتطبيقات Azure Mobile Apps على النظام الأساسي لنظام Android، لذلك إذا كان مشروعك يستخدم حزم دعم أحدث، فأنت بحاجة إلى تثبيت هذه الحزمة بالإصدار المطلوب مباشرة لتجنب التعارضات.

إضافة مصادقة إلى تطبيق iOS

يوضح هذا القسم كيفية تنفيذ واجهة IAuthenticate في مشروع تطبيق iOS. تخطي هذا القسم إذا كنت لا تدعم أجهزة iOS.

  1. في Visual Studio أو Xamarin Studio، انقر بزر الماوس الأيمن فوق مشروع iOS، ثم قم بتعيينه كبدء تشغيل Project.

  2. اضغط على F5 لبدء المشروع في مصحح الأخطاء، ثم تحقق من رفع استثناء غير معالج برمز حالة 401 (غير مصرح به) بعد بدء تشغيل التطبيق. يتم إنتاج استجابة 401 لأن الوصول على الواجهة الخلفية يقتصر على المستخدمين المصرح لهم فقط.

  3. افتح AppDelegate.cs في مشروع iOS وأضف العبارات التالية using :

     ```csharp
     using Microsoft.WindowsAzure.MobileServices;
     using System.Threading.Tasks;
     ```
    
  4. تحديث فئة AppDelegate لتنفيذ واجهة IAuthenticate ، كما يلي:

     ```csharp
     public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate, IAuthenticate
     ```
    
  5. قم بتحديث فئة AppDelegate عن طريق إضافة حقل MobileServiceUser وطريقة مصادقة ، وهو أمر مطلوب بواسطة واجهة IAuthenticate ، كما يلي:

     ```csharp
     // Define an authenticated user.
     private MobileServiceUser user;
    
     public async Task<bool> Authenticate()
     {
         var success = false;
         var message = string.Empty;
         try
         {
             // Sign in with Facebook login using a server-managed flow.
             if (user == null)
             {
                 user = await TodoItemManager.DefaultManager.CurrentClient
                     .LoginAsync(UIApplication.SharedApplication.KeyWindow.RootViewController,
                     MobileServiceAuthenticationProvider.Facebook, "{url_scheme_of_your_app}");
                 if (user != null)
                 {
                     message = string.Format("You are now signed-in as {0}.", user.UserId);
                     success = true;
                 }
             }
         }
         catch (Exception ex)
         {
            message = ex.Message;
         }
    
         // Display the success or failure message.
         UIAlertController avAlert = UIAlertController.Create("Sign-in result", message, UIAlertControllerStyle.Alert);
         avAlert.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default, null));
         UIApplication.SharedApplication.KeyWindow.RootViewController.PresentViewController(avAlert, true, null);
    
         return success;
     }
     ```
    

    إذا كنت تستخدم موفر هوية آخر غير فيسبوك، فاختر قيمة مختلفة ل [MobileServiceAuthenticationProvider].

  6. قم بتحديث فئة AppDelegate عن طريق إضافة الحمل الزائد لأسلوب OpenUrl ، كما يلي:

     ```csharp
     public override bool OpenUrl(UIApplication app, NSUrl url, NSDictionary options)
     {
         if (TodoItemManager.DefaultManager.CurrentClient.ResumeWithURL(app, url, options))
             return true;
         return base.OpenUrl(app, url, options);
     }
     ```
    
  7. قم بإضافة السطر التالي من التعليمات البرمجية إلى الأسلوب FinishedLaunch قبل الاستدعاء إلى LoadApplication():

     ```csharp
     App.Init(this);
     ```
    

    يضمن هذا الرمز تهيئة المصادقة قبل تحميل التطبيق.

  8. افتح Info.plist وأضف نوع عنوان URL. قم بتعيين المعرف إلى اسم من اختيارك، ومخططات عناوين URL إلى نظام عنوان URL لتطبيقك، والدور إلى بلا.

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

إضافة مصادقة إلى مشاريع تطبيقات Windows 10 (بما في ذلك الهاتف)

يوضح هذا القسم كيفية تنفيذ واجهة IAuthenticate في مشاريع تطبيق Windows 10. تنطبق نفس الخطوات على مشاريع النظام الأساسي العام لـ Windows (UWP) ، ولكن باستخدام مشروع UWP (مع التغييرات الملحوظة). تخطي هذا القسم إذا كنت لا تدعم أجهزة Windows.

  1. في Visual Studio، انقر بزر الماوس الأيمن فوق مشروع UWP، ثم قم بتعيين كبدء تشغيل Project.

  2. اضغط على F5 لبدء المشروع في مصحح الأخطاء، ثم تحقق من رفع استثناء غير معالج برمز حالة 401 (غير مصرح به) بعد بدء تشغيل التطبيق. تحدث استجابة 401 لأن الوصول على الواجهة الخلفية يقتصر على المستخدمين المصرح لهم فقط.

  3. افتح MainPage.xaml.cs لمشروع تطبيق Windows وأضف العبارات التاليةusing:

     ```csharp
     using Microsoft.WindowsAzure.MobileServices;
     using System.Threading.Tasks;
     using Windows.UI.Popups;
     using <your_Portable_Class_Library_namespace>;
     ```
    

    استبدل <your_Portable_Class_Library_namespace> بمساحة الاسم لمكتبة الفئات المحمولة.

  4. تحديث فئة MainPage لتنفيذ واجهة IAuthenticate ، كما يلي:

     public sealed partial class MainPage : IAuthenticate
    
  5. قم بتحديث فئة MainPage عن طريق إضافة حقل MobileServiceUser وطريقة مصادقة ، وهو أمر مطلوب بواسطة واجهة IAuthenticate ، كما يلي:

     ```csharp
     // Define an authenticated user.
     private MobileServiceUser user;
    
     public async Task<bool> Authenticate()
     {
         string message = string.Empty;
         var success = false;
    
         try
         {
             // Sign in with Facebook login using a server-managed flow.
             if (user == null)
             {
                 user = await TodoItemManager.DefaultManager.CurrentClient
                     .LoginAsync(MobileServiceAuthenticationProvider.Facebook, "{url_scheme_of_your_app}");
                 if (user != null)
                 {
                     success = true;
                     message = string.Format("You are now signed-in as {0}.", user.UserId);
                 }
             }
    
         }
         catch (Exception ex)
         {
             message = string.Format("Authentication Failed: {0}", ex.Message);
         }
    
         // Display the success or failure message.
         await new MessageDialog(message, "Sign-in result").ShowAsync();
    
         return success;
     }
     ```
    

    إذا كنت تستخدم موفر هوية آخر غير فيسبوك، فاختر قيمة مختلفة ل MobileServiceAuthenticationProvider.

  6. إضافة السطر التالي من التعليمات البرمجية في منشئ فئة MainPage قبل استدعاء إلى LoadApplication():

     ```csharp
     // Initialize the authenticator before loading the app.
     <your_Portable_Class_Library_namespace>.App.Init(this);
     ```
    

    استبدل <your_Portable_Class_Library_namespace> بمساحة الاسم لمكتبة الفئات المحمولة.

  7. إذا كنت تستخدم UWP، أضف تجاوز أسلوب OnActivated التالي إلى فئة التطبيق :

     ```csharp
     protected override void OnActivated(IActivatedEventArgs args)
     {
        base.OnActivated(args);
    
         if (args.Kind == ActivationKind.Protocol)
         {
             ProtocolActivatedEventArgs protocolArgs = args as ProtocolActivatedEventArgs;
             MobileServiceClientExtensions.ResumeWithURL(TodoItemManager.DefaultManager.CurrentClient,protocolArgs.Uri);
         }
     }
     ```
    
  8. افتح Package.appxmanifest وأضف إعلان بروتوكول . قم بتعيين اسم العرض إلى اسم من اختيارك، والاسم إلى نظام عنوان URL الخاص بتطبيقك.

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

الخطوات التالية

الآن بعد أن أكملت هذا البرنامج التعليمي الأساسي للمصادقة ، فكر في المتابعة إلى أحد البرامج التعليمية التالية:

  • إضافة إشعارات فورية إلى تطبيقك

    تعرف على كيفية إضافة دعم الإعلامات المباشرة إلى تطبيقك وتكوين الواجهة الخلفية لتطبيق الجوال لاستخدام مراكز إعلامات Azure لإرسال إعلامات فورية.

  • تمكين المزامنة بلا اتصال لتطبيقك

    تعرف على كيفية إضافة دعم في وضع عدم الاتصال لتطبيقك باستخدام الواجهة الخلفية لتطبيق الجوال. تسمح المزامنة في وضع عدم الاتصال للمستخدمين النهائيين بالتفاعل مع تطبيق جوال - عرض البيانات أو إضافتها أو تعديلها - حتى في حالة عدم وجود اتصال بالشبكة.