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.
Konfigurera önskad identitetsprovider genom att följa de providerspecifika anvisningarna:
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:
I Azure Portal väljer du din App Service.
Klicka på menyalternativet Autentisering/auktorisering .
Klicka på Azure Active Directory under avsnittet Autentiseringsprovidrar .
Ställ in Hanteringsläge på Avancerat.
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.Klicka på OK.
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:
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.
Ersätt
[self refresh]
iviewDidLoad
i QSTodoListViewController.m med följande kod:[self loginAndGetData];
Öppna filen
QSAppDelegate.h
och lägg till följande kod:#import "QSTodoService.h" @property (strong, nonatomic) QSTodoService *qsTodoService;
Ö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.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.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:
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.
Ta bort raderna
self.refreshControl?.beginRefreshing()
ochself.onRefresh(self.refreshControl)
i slutet avviewDidLoad()
i ToDoTableViewController.swift. Lägg till ett anroploginAndGetData()
i i deras ställe:loginAndGetData()
AppDelegate.swift
Öppna filen och lägg till följande rad iAppDelegate
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.
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.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