Sdílet prostřednictvím


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

Přehled

V tomto tématu se dozvíte, jak ověřovat uživatele mobilní aplikace z klientské aplikace. V tomto kurzu přidáte do projektu Rychlý start ověřování pomocí zprostředkovatele identity, který podporuje Azure Mobile Apps. Po úspěšném ověření a autorizaci v mobilní aplikaci se zobrazí hodnota ID uživatele.

Tento kurz je založený na rychlém startu mobilní aplikace. Musíte také nejprve dokončit kurz Vytvoření aplikace Xamarin.Android. Pokud stažený projekt serveru Rychlý start nepoužíváte, 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 je potřeba zaregistrovat aplikaci na webu zprostředkovatele identity a pak v back-endu Mobile Apps nastavit přihlašovací údaje vygenerované zprostředkovatelem.

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

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

Přidání aplikace do povolených adres URL pro externí přesměrování

Zabezpečené ověřování vyžaduje, abyste definovali nové schéma adres URL pro vaši aplikaci. Systém ověření tak může po dokončení ověřovacího procesu přesměrovat zpět k vaší aplikaci. V tomto kurzu používáme schéma adresy URL appname v celém textu. Můžete ale použít libovolné schéma adres URL, které zvolíte. Měla by být jedinečná pro vaši mobilní aplikaci. Povolení přesměrování na straně serveru:

  1. Na webu [Azure Portal] vyberte svou službu App Service.

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

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

  4. Klikněte na OK.

  5. Klikněte na Uložit.

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

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

  • Backend Node.js (prostřednictvím portálu Azure):

    V nastavení Mobile Apps klikněte na Snadné tabulky a vyberte tabulku. Klepněte na tlačítko Změnit oprávnění, vyberte Ověřený přístup pouze pro všechna oprávnění a potom klepněte na tlačítko Uložit.

  • .NET backend (C#):

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

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

    Pokud chcete vyžadovat ověřování pro přístup k tabulce, přidejte do skriptu serveru Node.js 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, můžete najít v tématu Postupy: Stažení projektu kódu rychlého startu Node.js backendu pomocí Gitu.

V sadě Visual Studio nebo Xamarin Studio spusťte klientský projekt na zařízení nebo emulátoru. Ověřte, že je po spuštění aplikace vyvolána neošetřená výjimka se stavovým kódem 401 (Neautorizováno). 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 požadovala 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 před zobrazením dat vyžadovala, aby uživatelé klepli 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();
     }
    

    Vytvoří se nová metoda pro ověření uživatele a obslužná rutina pro nové tlačítko Přihlásit se. Uživatel ve výše uvedeném ukázkovém 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 loginAsync výše na jednu z následujících možností: MicrosoftAccount, Twitter, Google nebo WindowsAzureActiveDirectory.

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

     OnRefreshItemsSelected ();
    
  3. Do souboru Activity_To_Do.axml před existující tlačítko AddItem přidejte 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 Strings.xml resources přidejte následující prvek:

     <string name="login_button_text">Sign in</string>
    
  5. Otevřete soubor AndroidManifest.xml a do elementu XML přidejte následující kód <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>
    
  6. V sadě Visual Studio nebo Xamarin Studio spusťte klientský projekt 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 úkolů a můžete provádět aktualizace dat.

Řešení problémů

Aplikace se chybově ukončila Java.Lang.NoSuchMethodError: No static method startActivity

V některých případech se konflikty v balíčcích podpory zobrazují pouze jako upozornění v sadě Visual Studio, ale aplikace spadne s touto výjimkou při běhu programu. V takovém případě se musíte ujistit, že všechny balíčky podpory odkazované v projektu mají stejnou verzi. Balíček NuGet Azure Mobile AppsXamarin.Android.Support.CustomTabs závislost pro platformu Android, takže pokud váš projekt používá novější balíčky podpory, musíte tento balíček nainstalovat s požadovanou verzí přímo, aby nedocházelo ke konfliktům.