Delen via


Verificatie toevoegen aan uw Xamarin.Android-app

Overzicht

In dit onderwerp wordt beschreven hoe u gebruikers van een mobiele app verifieert vanuit uw clienttoepassing. In deze zelfstudie voegt u verificatie toe aan het quickstartproject met behulp van een id-provider die wordt ondersteund door Azure Mobile Apps. Nadat de verificatie is geslaagd en geautoriseerd in de mobiele app, wordt de waarde van de gebruikers-id weergegeven.

Deze tutorial is gebaseerd op de quickstart voor mobiele apps. U moet ook eerst de zelfstudie Een Xamarin.Android-app maken voltooien. Als u het gedownloade snelstartserverproject niet gebruikt, moet u het verificatieuitbreidingspakket toevoegen aan uw project. Zie Werken met de SDK van de .NET-back-endserver voor Azure Mobile Appsvoor meer informatie over serveruitbreidingspakketten.

Uw app registreren voor verificatie en App Services configureren

Eerst moet u uw app registreren op de site van een id-provider en vervolgens stelt u de door de provider gegenereerde referenties in de back-end van Mobile Apps in.

  1. Configureer uw voorkeurs-id-provider door de providerspecifieke instructies te volgen:

  2. Herhaal de vorige stappen voor elke provider die u wilt ondersteunen in uw app.

Uw app toevoegen aan de toegestane externe omleidings-URL's

Voor beveiligde verificatie moet u een nieuw URL-schema voor uw app definiëren. Hierdoor kan het verificatiesysteem terugkeren naar uw app zodra het verificatieproces is voltooid. In deze zelfstudie gebruiken we het URL-schema appname overal. U kunt echter elk URL-schema gebruiken dat u kiest. Deze moet uniek zijn voor uw mobiele toepassing. De omleiding aan de serverzijde inschakelen:

  1. Selecteer uw App Service in [Azure Portal].

  2. Klik op de menuoptie Verificatie/autorisatie.

  3. Voer in bij de url_scheme_of_your_app://easyauth.callback. De url_scheme_of_your_app in deze string is het URL-schema voor uw mobiele applicatie. Deze moet de normale URL-specificatie voor een protocol volgen (gebruik alleen letters en cijfers en begin met een letter). Noteer de tekenreeks die u kiest, omdat u de code van uw mobiele toepassing moet aanpassen met het URL-schema op verschillende plaatsen.

  4. Klik op OK.

  5. Klik op Opslaan.

Machtigingen beperken voor geverifieerde gebruikers

Standaard kunnen API's in een back-end van Mobile Apps anoniem worden aangeroepen. Vervolgens moet u de toegang beperken tot alleen geverifieerde clients.

  • Node.js back-end (via de Azure portal):

    Klik in de instellingen van Mobile Apps op Easy Tables en selecteer de tabel. Klik op Machtigingen wijzigen, selecteer geverifieerde toegang alleen voor alle machtigingen en klik vervolgens op Opslaan.

  • .NET-back-end (C#):

    Navigeer in het serverproject naar Controllers>TodoItemController.cs. Voeg als volgt het kenmerk [Authorize] toe aan de klasse TodoItemController. Als u alleen de toegang tot specifieke methoden wilt beperken, kunt u dit kenmerk ook alleen toepassen op deze methoden in plaats van op de klasse. Publiceer het serverproject opnieuw.

      [Authorize]
      public class TodoItemController : TableController<TodoItem>
    
  • Node.js backend (via Node.js code):

    Als u verificatie voor tabeltoegang wilt vereisen, voegt u de volgende regel toe aan het Node.js serverscript:

      table.access = 'authenticated';
    

    Voor meer informatie, zie Hoe: Verificatie vereisen voor toegang tot tabellen. Zie How to: Download the Node.js backend quickstart code project using Gitvoor meer informatie over het downloaden van het quickstart-codeproject van uw site.

Voer in Visual Studio of Xamarin Studio het clientproject uit op een apparaat of emulator. Controleer of er een niet-verwerkte uitzondering met de statuscode 401 (Niet geautoriseerd) wordt gegenereerd nadat de app is gestart. Dit gebeurt omdat de app probeert toegang te krijgen tot de back-end van uw mobiele app als een niet-geverifieerde gebruiker. Voor de todoItem tabel is nu verificatie vereist.

Vervolgens werkt u de client-app bij om resources aan te vragen vanuit de back-end van de mobiele app met een geverifieerde gebruiker.

Verificatie toevoegen aan de app

De app wordt bijgewerkt om te vereisen dat gebruikers op de knop Aanmelden tikken en verifiëren voordat gegevens worden weergegeven.

  1. Voeg de volgende code toe aan de klasse TodoActivity :

     // 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();
     }
    

    Hiermee maakt u een nieuwe methode voor het verifiëren van een gebruiker en een methode-handler voor een nieuwe knop Aanmelden . De gebruiker in de bovenstaande voorbeeldcode wordt geverifieerd met behulp van een Facebook-aanmelding. Er wordt een dialoogvenster gebruikt om de gebruikers-id weer te geven nadat deze is geverifieerd.

    Opmerking

    Als u een andere id-provider dan Facebook gebruikt, wijzigt u de waarde die hierboven is doorgegeven aan LoginAsync in een van de volgende: MicrosoftAccount, Twitter, Google of WindowsAzureActiveDirectory.

  2. In de methode OnCreate, verwijder of commentarieer de volgende regel code:

     OnRefreshItemsSelected ();
    
  3. Voeg in het bestand Activity_To_Do.axml de volgende loginUser-knopdefinitie toe vóór de bestaande knop AddItem :

       <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. Voeg het volgende element toe aan het bestand Strings.xml resources:

     <string name="login_button_text">Sign in</string>
    
  5. Open het bestand AndroidManifest.xml en voeg de volgende code toe in <application> het XML-element:

     <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. Voer in Visual Studio of Xamarin Studio het clientproject uit op een apparaat of emulator en meld u aan met de door u gekozen id-provider. Wanneer u zich succesvol hebt aangemeld, geeft de app uw login-ID en de lijst met taken weer en kunt u de gegevens bijwerken.

Probleemoplossingsproces

De toepassing is vastgelopen met Java.Lang.NoSuchMethodError: No static method startActivity

In sommige gevallen worden conflicten in de ondersteuningspakketten weergegeven als een waarschuwing in Visual Studio, maar de toepassing loopt vast met deze uitzondering tijdens runtime. In dit geval moet u ervoor zorgen dat alle ondersteuningspakketten waarnaar in uw project wordt verwezen, dezelfde versie hebben. Het NuGet-pakket van Azure Mobile Apps heeft Xamarin.Android.Support.CustomTabs afhankelijkheid voor het Android-platform, dus als uw project nieuwere ondersteuningspakketten gebruikt, moet u dit pakket rechtstreeks met de vereiste versie installeren om conflicten te voorkomen.