Dela via


Lägga till autentisering i Xamarin.iOS-appen

Översikt

Det här avsnittet visar hur du autentiserar användare av en App Service Mobile App från klientprogrammet. I den här självstudien lägger du till autentisering i snabbstartsprojektet Xamarin.iOS med hjälp av en identitetsprovider som stöds av App Service. När du har autentiserats och auktoriserats av din mobilapp visas användar-ID-värdet och du kommer att kunna komma åt begränsade tabelldata.

Du måste först slutföra handledningen Skapa en Xamarin.iOS-app. Om du inte använder det nedladdade snabbstartsserverprojektet måste du lägga till paketet för autentiseringstillägg i projektet. Mer information om servertilläggspaket finns i Work with the .NET backend server SDK for 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 anger du de providergenererade autentiseringsuppgifterna i mobile apps-serverdelen.

  1. Konfigurera din önskade identitetsprovider genom att följa de providerspecifika anvisningarna:

  2. Upprepa föregående steg för varje leverantör 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-schemat appname genomgående. Du kan dock använda valfritt URL-schema som du väljer. Den bör vara unik för ditt mobilprogram. Så här aktiverar du omdirigeringen på serversidan:

  1. I Azure-portalen väljer du din App Service.

  2. Klicka på menyalternativet Autentisering/auktorisering .

  3. I URL:er för tillåten extern omdirigering anger du url_scheme_of_your_app://easyauth.callback. Den url_scheme_of_your_app i den här strängen är URL-schemat för ditt mobilprogram. Den bör följa normal URL-specifikation 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 måste justera din mobilprogramkod 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 i en Mobile Apps-serverdel anropas anonymt. Därefter måste du begränsa åtkomsten till endast autentiserade klienter.

  • Node.js-backend (via Azure-portalen)

    I inställningarna för Mobilappar 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 Controllers>TodoItemController.cs. [Authorize] Lägg till 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. Återpublicera serverprojektet.

      [Authorize]
      public class TodoItemController : TableController<TodoItem>
    
  • Node.js backend (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 Så här: Kräv autentisering för åtkomst till tabeller. Information om hur du laddar ned snabbstartskodprojektet från din webbplats finns i Så här laddar du ned snabbstartskodprojektet Node.js serverdel 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) har aktiverats när appen startas. Felet loggas till konsolen för felsökningsprogrammet. Så i Visual Studio bör du se felet i utdatafönstret.

    Det här obehöriga felet inträffar eftersom appen försöker komma åt mobilappens serverdel som en oautentiserad användare. Tabellen TodoItem kräver nu autentisering.

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

Lägga till autentisering i appen

I det här avsnittet ändrar du appen så att den visar en inloggningsskärm innan du visar data. När appen startar ansluts den inte till din App Service och visar inga data. Efter första gången användaren utför uppdateringsgesten visas inloggningsskärmen. När du har loggat in visas listan över att göra-objekt.

  1. I klientprojektet öppnar du filen QSTodoService.cs och lägger till följande using-sats och MobileServiceUser med accessor i klassen QSTodoService:

    using UIKit;
    
    // Logged in user
    private MobileServiceUser user;
    public MobileServiceUser User { get { return user; } }
    
  2. Lägg till en ny metod med namnet Authenticate to QSTodoService med följande definition:

    public async Task Authenticate(UIViewController view)
    {
        try
        {
            AppDelegate.ResumeWithURL = url => url.Scheme == "{url_scheme_of_your_app}" && client.ResumeWithURL(url);
            user = await client.LoginAsync(view, MobileServiceAuthenticationProvider.Facebook, "{url_scheme_of_your_app}");
        }
        catch (Exception ex)
        {
            Console.Error.WriteLine (@"ERROR - AUTHENTICATION FAILED {0}", ex.Message);
        }
    }
    

    Anmärkning

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

  3. Öppna QSTodoListViewController.cs. Ändra metoddefinitionen för ViewDidLoad och ta bort anropet till RefreshAsync() nära slutet:

    public override async void ViewDidLoad ()
    {
        base.ViewDidLoad ();
    
        todoService = QSTodoService.DefaultService;
        await todoService.InitializeStoreAsync();
    
        RefreshControl.ValueChanged += async (sender, e) => {
            await RefreshAsync();
        }
    
        // Comment out the call to RefreshAsync
        // await RefreshAsync();
    }
    
  4. Ändra metoden RefreshAsync för att autentisera om egenskapen User är null. Lägg till följande kod överst i metoddefinitionen:

    // start of RefreshAsync method
    if (todoService.User == null) {
        await QSTodoService.DefaultService.Authenticate(this);
        if (todoService.User == null) {
            Console.WriteLine("couldn't login!!");
            return;
        }
    }
    // rest of RefreshAsync method
    
  5. Öppna AppDelegate.cs och lägg till följande metod:

    public override bool OpenUrl(UIApplication app, NSUrl url, NSDictionary options)
    {
        if (client.ResumeWithURL(app, url, options))
            return true;
        return base.OpenUrl(app, url, options);
    }
    
  6. Öppna filen Info.plist och gå till URL-typer i avsnittet Avancerat . Konfigurera nu identifieraren och URL-scheman för din URL-typ och klicka på Lägg till URL-typ. URL-scheman bör vara samma som {url_scheme_of_your_app}.

  7. I Visual Studio, som är ansluten till din Mac-värd eller Visual Studio för Mac, kör du klientprojektet som riktar sig mot en enhet eller emulator. Kontrollera att appen inte visar några data.

    Utför uppdateringsgesten genom att dra ned listan med objekt, vilket gör att inloggningsskärmen visas. När du har angett giltiga autentiseringsuppgifter visar appen listan över att göra-objekt och du kan göra uppdateringar av data.