Sdílet prostřednictvím


Přidání ověřování do aplikace Xamarin.Android

Přehled

Toto téma ukazuje, jak ověřovat uživatele mobilní aplikace z klientské aplikace. V tomto kurzu přidáte do projektu rychlého startu ověřování pomocí zprostředkovatele identity podporovaného službou Azure Mobile Apps. Po úspěšném ověření a ověření v mobilní aplikaci se zobrazí hodnota ID uživatele.

Tento kurz vychází z rychlého startu k mobilní aplikaci. Musíte také nejprve dokončit kurz Vytvoření aplikace Xamarin.Android. Pokud stažený projekt serveru pro rychlý start použít používejte, musíte do projektu přidat balíček rozšíření ověřování. Další informace o balíčcích rozšíření serveru najdete v tématu Práce se sadou SDK back-endového serveru .NET pro Azure Mobile Apps.

Registrace aplikace pro ověřování a konfigurace App Services

Nejprve musíte svou aplikaci zaregistrovat na webu zprostředkovatele identity a pak nastavíte přihlašovací údaje generované zprostředkovatelem v Mobile Apps back-endu.

  1. Nakonfigurujte upřednostňovaného zprostředkovatele identity podle pokynů specifických pro zprostředkovatele:

  2. Opakujte předchozí kroky pro každého zprostředkovatele, kterého chcete ve své aplikaci podporovat.

Přidání aplikace do adres URL povoleného externího přesměrování

Zabezpečené ověřování vyžaduje, aby bylo pro vaši aplikaci definováno nové schéma adresy URL. Díky tomu může ověřovací systém po dokončení procesu ověřování přesměrovat zpět do vaší aplikace. V tomto kurzu používáme v celém kurzu název aplikace schématu adresy URL. Můžete ale použít libovolné schéma URL, které si zvolíte. Měl by být jedinečný pro vaši mobilní aplikaci. Povolení přesměrování na straně serveru:

  1. V okně [Azure Portal] vyberte svou App Service.

  2. Klikněte na možnost nabídky Ověřování / autorizace.

  3. Do pole Povolené externí adresy URL pro přesměrování zadejte url_scheme_of_your_app://easyauth.callback. Řetězec url_scheme_of_your_app tomto řetězci je schéma adresy URL pro vaši mobilní aplikaci. Měl by se řídit normální specifikací adresy URL pro protokol (používejte pouze písmena a číslice a začněte písmenem). Řetězec, který zvolíte, byste si měli poznamenat, protože na několika místech budete muset upravit kód mobilní aplikace pomocí schématu adresy URL.

  4. Klikněte na OK.

  5. Klikněte na Uložit.

Omezení oprávnění na ověřené uživatele

Ve výchozím nastavení je možné rozhraní API Mobile Apps back-endu vyvolat anonymně. Dále musíte omezit přístup jenom na ověřené klienty.

  • Node.js back-end (prostřednictvím Azure Portal):

    V nastavení Mobile Apps klikněte na Snadné tabulky a vyberte tabulku. Klikněte na Změnit oprávnění, u všech oprávnění vyberte Jenom ověřený přístup a pak klikněte na Uložit.

  • Back-end .NET (C#):

    V projektu serveru přejděte na ControllersTodoItemController.cs>. Přidejte [Authorize] atribut do třídy TodoItemController následujícím způsobem. Chcete-li omezit přístup pouze na konkrétní metody, můžete také použít tento atribut pouze na tyto metody namísto třídy. Znovu publikujte projekt serveru.

      [Authorize]
      public class TodoItemController : TableController<TodoItem>
    
  • Node.js back-end (prostřednictvím Node.js kódu):

    Pokud chcete vyžadovat ověřování pro přístup k tabulce, přidejte do skriptu Node.js serveru následující řádek:

      table.access = 'authenticated';
    

    Další podrobnosti najdete v tématu Postupy: Vyžadování ověřování pro přístup k tabulkám. Informace o tom, jak stáhnout projekt kódu pro rychlý start z webu, najdete v tématu Postupy: Stažení projektu kódu Node.js back-endu pomocí Gitu.

V Visual Studio nebo Xamarin Studio spusťte projekt klienta na zařízení nebo emulátoru. Ověřte, že neošetřená výjimka se stavový kódem 401 (Neautorizované) je vyvolána po spuštění aplikace. K tomu dochází proto, že se aplikace pokusí o přístup k back-endu mobilní aplikace jako neověřený uživatel. Tabulka TodoItem teď vyžaduje ověření.

Dále aktualizujete klientskou aplikaci tak, aby si vyžádala prostředky z back-endu mobilní aplikace s ověřeným uživatelem.

Přidání ověřování do aplikace

Aplikace se aktualizuje tak, aby vyžadovala, aby uživatelé před zobrazením dat klepnou na tlačítko Přihlásit se a ověřili se.

  1. Do třídy TodoActivity přidejte následující kód:

     // Define an authenticated user.
     private MobileServiceUser user;
     private async Task<bool> Authenticate()
     {
             var success = false;
             try
             {
                 // Sign in with Facebook login using a server-managed flow.
                 user = await client.LoginAsync(this,
                     MobileServiceAuthenticationProvider.Facebook, "{url_scheme_of_your_app}");
                 CreateAndShowDialog(string.Format("you are now logged in - {0}",
                     user.UserId), "Logged in!");
    
                 success = true;
             }
             catch (Exception ex)
             {
                 CreateAndShowDialog(ex, "Authentication failed");
             }
             return success;
     }
    
     [Java.Interop.Export()]
     public async void LoginUser(View view)
     {
         // Load data only after authentication succeeds.
         if (await Authenticate())
         {
             //Hide the button after authentication succeeds.
             FindViewById<Button>(Resource.Id.buttonLoginUser).Visibility = ViewStates.Gone;
    
             // Load the data.
             OnRefreshItemsSelected();
         }
     }
    
     public override void OnResume()
     {
         base.OnResume();
         Xamarin.Essentials.Platform.OnResume();
     }
    

    Tím se vytvoří nová metoda pro ověření uživatele a obslužná rutina metody pro nové tlačítko Přihlásit se. Uživatel ve výše uvedeném příkladu kódu se ověřuje pomocí přihlášení k Facebooku. Dialogové okno slouží k zobrazení ID uživatele po ověření.

    Poznámka

    Pokud používáte jiného zprostředkovatele identity než Facebook, změňte hodnotu předanou metodě LoginAsync výše na jednu z následujících hodnot: MicrosoftAccount, Twitter, Google nebo WindowsAzureActiveDirectory.

  2. V metodě OnCreate odstraňte nebo okomentování následujícího řádku kódu:

     OnRefreshItemsSelected ();
    
  3. V souboru Activity_To_Do.axml přidejte před existující tlačítko AddItem následující definici tlačítka LoginUser:

       <Button
         android:id="@+id/buttonLoginUser"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:onClick="LoginUser"
         android:text="@string/login_button_text" />
    
  4. Do souboru prostředků přidejte Strings.xml element :

     <string name="login_button_text">Sign in</string>
    
  5. Otevřete soubor AndroidManifest.xml kódu a do elementu XML přidejte následující <application> kód:

     <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>
    
  6. V Visual Studio nebo Xamarin Studio spusťte projekt klienta na zařízení nebo emulátoru a přihlaste se pomocí zvoleného zprostředkovatele identity. Po úspěšném přihlášení aplikace zobrazí vaše přihlašovací ID a seznam položek seznamu úkolů a můžete data aktualizovat.

Řešení potíží

Aplikace se zhroucela s Java.Lang.NoSuchMethodError: No static method startActivity

V některých případech dojde ke konfliktům v podpůrných balíčcích zobrazených v sadě Visual Studio jako upozornění, ale aplikace se s touto výjimkou za běhu zhroutí. V takovém případě se musíte ujistit, že všechny balíčky podpory odkazované ve vašem projektu mají stejnou verzi. Balíček NuGet pro mobilní aplikace AzureXamarin.Android.Support.CustomTabszávislost pro platformu Android, takže pokud váš projekt používá novější balíčky podpory, je nutné nainstalovat přímo tento balíček s požadovanou verzi, aby nedocházelo ke konfliktům.