Share via


Lägga till autentisering i Xamarin.Android-appen

Översikt

Det här avsnittet visar hur du autentiserar användare av en mobilapp från klientprogrammet. I den här självstudien lägger du till autentisering i snabbstartsprojektet med hjälp av en identitetsprovider som stöds av Azure Mobile Apps. När autentiseringen har lyckats och auktoriserats i mobilappen visas värdet för användar-ID:t.

Den här självstudien baseras på snabbstarten för mobilappar. Du måste också slutföra självstudien Skapa en Xamarin.Android-app. Om du inte använder det hämtade snabbstartsserverprojektet måste du lägga till autentiseringstilläggspaketet i projektet. Mer information om servertilläggspaket finns i Arbeta med SDK för .NET-serverserver för Azure Mobile Apps.

Registrera din app för autentisering och konfigurera App Services

Först måste du registrera din app på en identitetsproviders webbplats och sedan ange de autentiseringsuppgifter som genererats av providern Mobile Apps-backend.

  1. Konfigurera den identitetsprovider du föredrar genom att följa de providerspecifika anvisningarna:

  2. Upprepa föregående steg för varje provider som du vill stödja i din app.

Lägg till din app i url:erna för tillåten extern omdirigering

Säker autentisering kräver att du definierar ett nytt URL-schema för din app. Detta gör att autentiseringssystemet kan omdirigera tillbaka till din app när autentiseringsprocessen är klar. I den här självstudien använder vi URL-schemats appnamn genomgående. Du kan dock använda val annat URL-schema. Det bör vara unikt för ditt mobilprogram. Så här aktiverar du omdirigeringen på serversidan:

  1. I [Azure Portal] väljer du App Service.

  2. Klicka på menyalternativet Autentisering/auktorisering .

  3. I Tillåtna externa omdirigerings-URL:er anger du url_scheme_of_your_app://easyauth.callback. Den url_scheme_of_your_app strängen är URL-schemat för ditt mobilprogram. Den bör följa den normala URL-specifikationen för ett protokoll (använd endast bokstäver och siffror och börja med en bokstav). Du bör anteckna strängen som du väljer eftersom du behöver justera koden för mobilprogram med URL-schemat på flera platser.

  4. Klicka på OK.

  5. Klicka på Spara.

Begränsa behörigheter till autentiserade användare

Som standard kan API:er Mobile Apps en backend anropas anonymt. Därefter behöver du begränsa åtkomsten till endast autentiserade klienter.

  • Node.js (via Azure Portal):

    I inställningarna Mobile Apps klickar du på Enkla tabeller och väljer tabellen. Klicka på Ändra behörigheter, välj Endast autentiserad åtkomst för alla behörigheter och klicka sedan på Spara.

  • .NET-backend (C#):

    I serverprojektet navigerar du till ControllersTodoItemController.cs>. Lägg till [Authorize] attributet i klassen TodoItemController enligt följande. Om du bara vill begränsa åtkomsten till specifika metoder kan du även använda det här attributet bara för dessa metoder i stället för klassen . Publicera om serverprojektet.

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

    Om du vill kräva autentisering för tabellåtkomst lägger du till följande rad i Node.js serverskriptet:

      table.access = 'authenticated';
    

    Mer information finns i Gör så här: Kräv autentisering för åtkomst till tabeller. Information om hur du laddar ned snabbstartskodprojektet från webbplatsen finns i How to: Download the Node.js backend quickstart code project using Git (Så här gör du: Ladda ned kodprojektet för Node.js backend med Git).

I Visual Studio eller Xamarin Studio kör du klientprojektet på en enhet eller emulator. Kontrollera att ett ohanterat undantag med statuskoden 401 (Obehörig) utlöses när appen startar. Detta beror på att appen försöker få åtkomst till mobilappens backend som en oauthenticerad användare. TodoItem-tabellen kräver nu autentisering.

Därefter uppdaterar du klientappen för att begära resurser från mobilappens backend-enhet med en autentiserad användare.

Lägga till autentisering i appen

Appen uppdateras så att användarna måste trycka på knappen Logga in och autentisera innan data visas.

  1. Lägg till följande kod i klassen 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();
     }
    

    Detta skapar en ny metod för att autentisera en användare och en metodhanterare för en ny inloggningsknapp . Användaren i exempelkoden ovan autentiseras med hjälp av en Facebook-inloggning. En dialogruta används för att visa användar-ID:t när det har autentiserats.

    Anteckning

    Om du använder en annan identitetsprovider än Facebook ändrar du värdet som skickas till LoginAsync ovan till något av följande: MicrosoftAccount, Twitter, Google eller WindowsAzureActiveDirectory.

  2. I metoden OnCreate tar du bort eller kommenterar ut följande kodrad:

     OnRefreshItemsSelected ();
    
  3. I filen Activity_To_Do.axml lägger du till följande loginUser-knappdefinition före den befintliga AddItem-knappen :

       <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. Lägg till följande element i Strings.xml resursfil:

     <string name="login_button_text">Sign in</string>
    
  5. Öppna filen AndroidManifest.xml och lägg till följande kod i <application> XML-elementet:

     <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. I Visual Studio eller Xamarin Studio kör du klientprojektet på en enhet eller emulator och loggar in med din valda identitetsprovider. När du har loggat in visar appen ditt inloggnings-ID och listan med att göra-objekt, och du kan göra uppdateringar av data.

Felsökning

Programmet kraschade med Java.Lang.NoSuchMethodError: No static method startActivity

I vissa fall visas konflikter i supportpaketen som bara en varning i Visual Studio, men programmet kraschar med det här undantaget vid körning. I det här fallet måste du se till att alla supportpaket som refereras till i projektet har samma version. Azure Mobile Apps NuGet-paketet är Xamarin.Android.Support.CustomTabs beroende av Android-plattformen, så om projektet använder nyare supportpaket behöver du installera det här paketet i erfordrad version direkt för att undvika konflikter.