Lägga till autentisering i din iOS-app

I den här självstudien lägger du till autentisering i iOS-snabbstartsprojektet med hjälp av en identitetsprovider som stöds. Den här självstudien baseras på snabbstartsguiden för iOS , som du måste slutföra först.

Registrera din app för autentisering och konfigurera App Service

Först måste du registrera din app på en identitetsproviders webbplats och sedan ange de providergenererade autentiseringsuppgifterna i Mobile Apps-serverdelen.

  1. Konfigurera önskad identitetsprovider 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ägga 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-schemaappens appnamn hela vägen. Du kan dock använda valfritt URL-schema som du väljer. Det bör vara unikt för ditt mobilprogram. Så här aktiverar du omdirigeringen på den här serversidan:

  1. I Azure Portal väljer du din App Service.

  2. Klicka på menyalternativet Autentisering/auktorisering .

  3. Klicka på Azure Active Directory under avsnittet Autentiseringsprovidrar .

  4. Ställ in HanteringslägeAvancerat.

  5. I URL:erna för tillåten extern omdirigering anger du appname://easyauth.callback. Appnamnet i den här strängen är URL-schemat för ditt mobilprogram. Det 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 koden för mobilprogram med URL-schemat på flera platser.

  6. Klicka på OK.

  7. 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 serverdel (via Azure Portal) :

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

  • .NET-serverdel (C#):

    I serverprojektet går 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 . Publicera om serverprojektet.

      [Authorize]
      public class TodoItemController : TableController<TodoItem>
    
  • Node.js serverdel (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 din webbplats finns i Så här laddar du ned Node.js snabbstartskodprojektet för serverdelen med Git.

I Xcode trycker du på Kör för att starta appen. Ett undantag utlöses eftersom appen försöker komma åt serverdelen som en oautentiserad användare, men TodoItem-tabellen kräver nu autentisering.

Lägga till autentisering i appen

Objective-C:

  1. På din Mac öppnar du QSTodoListViewController.m i Xcode och lägger till följande metod:

    - (void)loginAndGetData
    {
        QSAppDelegate *appDelegate = (QSAppDelegate *)[UIApplication sharedApplication].delegate;
        appDelegate.qsTodoService = self.todoService;
    
        [self.todoService.client loginWithProvider:@"google" urlScheme:@"appname" controller:self animated:YES completion:^(MSUser * _Nullable user, NSError * _Nullable error) {
            if (error) {
                NSLog(@"Login failed with error: %@, %@", error, [error userInfo]);
            }
            else {
                self.todoService.client.currentUser = user;
                NSLog(@"User logged in: %@", user.userId);
    
                [self refresh];
            }
        }];
    }
    

    Ändra google till microsoftaccount, twitter, facebook eller windowsazureactivedirectory om du inte använder Google som identitetsprovider. Om du använder Facebook måste du tillåta Facebook-domäner i din app.

    Ersätt urlScheme med ett unikt namn för ditt program. URLScheme ska vara samma som url-schemaprotokollet som du angav i fältet Tillåtna externa omdirigerings-URL:er i Azure Portal. URLScheme används av återanropet för autentisering för att växla tillbaka till ditt program när autentiseringsbegäran har slutförts.

  2. Ersätt [self refresh] i viewDidLoad i QSTodoListViewController.m med följande kod:

    [self loginAndGetData];
    
  3. Öppna filen QSAppDelegate.h och lägg till följande kod:

    #import "QSTodoService.h"
    
    @property (strong, nonatomic) QSTodoService *qsTodoService;
    
  4. Öppna filen QSAppDelegate.m och lägg till följande kod:

    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
    {
        if ([[url.scheme lowercaseString] isEqualToString:@"appname"]) {
            // Resume login flow
            return [self.qsTodoService.client resumeWithURL:url];
        }
        else {
            return NO;
        }
    }
    

    Lägg till den här koden direkt innan raden läser #pragma mark - Core Data stack. Ersätt appname med det urlScheme-värde som du använde i steg 1.

  5. AppName-Info.plist Öppna filen (ersätt AppName med namnet på din app) och lägg till följande kod:

    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleURLName</key>
            <string>com.microsoft.azure.zumo</string>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>appname</string>
            </array>
        </dict>
    </array>
    

    Den här koden ska placeras inuti -elementet <dict> . Ersätt appname-strängen (i matrisen för CFBundleURLSchemes) med det appnamn som du valde i steg 1. Du kan också göra dessa ändringar i plist-redigeraren – klicka på AppName-Info.plist filen i XCode för att öppna plist-redigeraren.

    Ersätt strängen com.microsoft.azure.zumo för CFBundleURLName med din Apple-paketidentifierare.

  6. Tryck på Kör för att starta appen och logga sedan in. När du är inloggad bör du kunna visa att göra-listan och göra uppdateringar.

Swift:

  1. På din Mac öppnar du ToDoTableViewController.swift i Xcode och lägger till följande metod:

    func loginAndGetData() {
    
        guard let client = self.table?.client, client.currentUser == nil else {
            return
        }
    
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        appDelegate.todoTableViewController = self
    
        let loginBlock: MSClientLoginBlock = {(user, error) -> Void in
            if (error != nil) {
                print("Error: \(error?.localizedDescription)")
            }
            else {
                client.currentUser = user
                print("User logged in: \(user?.userId)")
            }
        }
    
        client.login(withProvider:"google", urlScheme: "appname", controller: self, animated: true, completion: loginBlock)
    
    }
    

    Ändra google till microsoftaccount, twitter, facebook eller windowsazureactivedirectory om du inte använder Google som identitetsprovider. Om du använder Facebook måste du vitlista Facebook-domäner i din app.

    Ersätt urlScheme med ett unikt namn för ditt program. URLScheme ska vara samma som url-schemaprotokollet som du angav i fältet Tillåtna externa omdirigerings-URL:er i Azure Portal. URLScheme används av återanropet för autentisering för att växla tillbaka till ditt program när autentiseringsbegäran har slutförts.

  2. Ta bort raderna self.refreshControl?.beginRefreshing() och self.onRefresh(self.refreshControl) i slutet av viewDidLoad() i ToDoTableViewController.swift. Lägg till ett anrop loginAndGetData() i i deras ställe:

    loginAndGetData()
    
  3. AppDelegate.swift Öppna filen och lägg till följande rad i AppDelegate klassen :

    var todoTableViewController: ToDoTableViewController?
    
    func application(_ application: UIApplication, openURL url: NSURL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
        if url.scheme?.lowercased() == "appname" {
            return (todoTableViewController!.table?.client.resume(with: url as URL))!
        }
        else {
            return false
        }
    }
    

    Ersätt appname med det urlScheme-värde som du använde i steg 1.

  4. AppName-Info.plist Öppna filen (ersätt AppName med namnet på din app) och lägg till följande kod:

    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleURLName</key>
            <string>com.microsoft.azure.zumo</string>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>appname</string>
            </array>
        </dict>
    </array>
    

    Den här koden ska placeras inuti -elementet <dict> . Ersätt appname-strängen (i matrisen för CFBundleURLSchemes) med det appnamn som du valde i steg 1. Du kan också göra dessa ändringar i plist-redigeraren – klicka på AppName-Info.plist filen i XCode för att öppna plist-redigeraren.

    Ersätt strängen com.microsoft.azure.zumo för CFBundleURLName med din Apple-paketidentifierare.

  5. Tryck på Kör för att starta appen och logga sedan in. När du är inloggad bör du kunna visa att göra-listan och göra uppdateringar.

App Service-autentisering använder Apples Inter-App Communication. Mer information om det här ämnet finns i Apple-dokumentationen