Share via


Lägga till autentisering i Xamarin.iOS-appen

Översikt

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

Du måste först slutföra självstudien Skapa en Xamarin.iOS-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. Felet loggas i felsökningsprogrammets konsol. I Visual Studio bör du se felet i utdatafönstret.

    Detta otillåtna fel inträffar eftersom appen försöker komma åt mobilappens backend som en oauktorerad 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

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

  1. I klientprojektet öppnar du filen QSTodoService.csMobileServiceUser och lägger till följande using-instruktion och med accessor till 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 (Autentisera till 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);
        }
    }
    

    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.

  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 Identifierare ochURL-scheman för din URL-typ och klicka på Lägg till URL-typ. URL-scheman ska vara samma som din {url_scheme_of_your_app}.

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

    Utför uppdateringsgesten genom att hämta listan över 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.