Aggiungere l'autenticazione all'app iOS
Questa esercitazione illustra come aggiungere l'autenticazione al progetto di avvio rapido di iOS tramite un provider di identità supportato. Questa esercitazione è basata sull'esercitazione relativa all' avvio rapido di iOS , che deve essere completata per prima.
Registrare l'app per l'autenticazione e configurare il servizio app
Innanzitutto, è necessario registrare l'app nel sito di un provider di identità e quindi impostare le credenziali generate dal provider nel back-end dell'app per dispositivi mobili.
Configurare il provider di identità preferito seguendo le istruzioni specifiche del provider:
Ripetere i passaggi precedenti per ogni provider di cui si desidera il supporto nell'app.
Aggiungere l'app agli URL di reindirizzamento esterni consentiti
L'autenticazione sicura richiede la definizione di un nuovo schema URL per l'app. In questo modo il sistema di autenticazione reindirizza all'app al termine del processo di autenticazione. In questa esercitazione si usa lo schema URL appname. È tuttavia possibile usare QUALSIASI schema URL. Lo schema deve essere univoco per l'applicazione per dispositivi mobili. Per abilitare il reindirizzamento sul lato server:
Nel portale di Azure selezionare il servizio app.
Fare clic sull'opzione di menu Autenticazione/Autorizzazione.
Fare clic su Azure Active Directory nella sezione Provider di autenticazione.
Impostare Modalità di gestione su Avanzata.
In URL di reindirizzamento esterni consentiti specificare
appname://easyauth.callback
. Il valore appname in questa stringa è lo schema URL per l'applicazione per dispositivi mobili. Deve seguire le normale specifica URL per un protocollo, ovvero usare solo lettere e numeri e iniziare con una lettera. È opportuno prendere nota della stringa scelta perché sarà necessario modificare il codice dell'applicazione per dispositivi mobili con lo schema URL in diverse posizioni.Fare clic su OK.
Fare clic su Save (Salva).
Limitare le autorizzazioni agli utenti autenticati
Per impostazione predefinita, le API in un back-end dell'app per dispositivi mobili possono essere richiamate in modo anonimo. È necessario limitare l'accesso solo ai client autenticati.
Back-end Node. js nuovamente fine (tramite il Portale di Azure) :
Nelle impostazioni delle app per dispositivi mobili fare clic su Tabelle semplici e selezionare la tabella. Fare clic su Modifica autorizzazioni, selezionare Authenticated access only (Solo accesso con autenticazione) per tutte le autorizzazioni e quindi fare clic su Salva.
Back-end. NET (C#):
Nel progetto server passare a Controller>TodoItemController.cs. Aggiungere l'attributo
[Authorize]
alla classe TodoItemController, come indicato di seguito. Per limitare l'accesso solo a metodi specifici, è inoltre possibile applicare questo attributo solo a tali metodi anziché alla classe. Pubblicare di nuovo il progetto server.[Authorize] public class TodoItemController : TableController<TodoItem>
Back-end Node.js (tramite codice Node.js) :
Per richiedere l'autenticazione per l'accesso alla tabella, aggiungere la riga seguente allo script del server Node.js:
table.access = 'authenticated';
Per altre informazioni, vedere Procedura: Richiedere l'autenticazione per l'accesso alle tabelle. Per informazioni su come scaricare il progetto di codice di avvio rapido dal sito, vedere Procedura: Scaricare il progetto di codice di avvio rapido del back-end Node.js tramite Git.
In Xcode fare clic su Esegui per avviare l'app. Viene generata un'eccezione perché l'app prova ad accedere al back-end come utente non autenticato, mentre ora la tabella TodoItem richiede l'autenticazione.
Aggiungere l'autenticazione all'app
Objective-C:
In Mac aprire QSTodoListViewController.m in Xcode e aggiungere il metodo seguente:
- (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]; } }]; }
Modificare google in microsoftaccount, twitter, facebook o windowsazureactivedirectory se non si usa Google come provider di identità. Se usi Facebook, devi consentire i domini Facebook nella tua app.
Sostituire urlScheme con un nome univoco per l'applicazione. Il valore di urlScheme deve corrispondere a quello del protocollo dello schema URL specificato nel campo URL di reindirizzamento esterni consentiti nel portale di Azure. urlScheme viene usato dal callback di autenticazione per tornare all'applicazione dopo aver completato la richiesta di autenticazione.
Sostituire
[self refresh]
inviewDidLoad
in QSTodoListViewController.m con il codice seguente:[self loginAndGetData];
Aprire il file
QSAppDelegate.h
e aggiungere il codice seguente:#import "QSTodoService.h" @property (strong, nonatomic) QSTodoService *qsTodoService;
Aprire il file
QSAppDelegate.m
e aggiungere il codice seguente:- (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; } }
Aggiungere questo codice direttamente prima della riga
#pragma mark - Core Data stack
. Sostituire appname con il valore urlScheme usato nel passaggio 1.Aprire il file
AppName-Info.plist
(sostituendo AppName con il nome dell'app) e aggiungere il codice seguente:<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLName</key> <string>com.microsoft.azure.zumo</string> <key>CFBundleURLSchemes</key> <array> <string>appname</string> </array> </dict> </array>
Questo codice deve essere inserito all'interno dell'elemento
<dict>
. Sostituire la stringa appname (all'interno della matrice per CFBundleURLSchemes) con il nome app scelto nel passaggio 1. È possibile apportare queste modifiche anche nell'editor Plist. Fare clic sul fileAppName-Info.plist
in XCode per aprire l'editor Plist.Sostituire la stringa
com.microsoft.azure.zumo
per CFBundleURLName con l'identificatore del bundle Apple.Premere Esegui per avviare l'app e quindi accedere. Una volta eseguito l'accesso, dovrebbe essere possibile visualizzare l'elenco Todo e apportare modifiche.
Swift:
In Mac aprire ToDoTableViewController.swift in Xcode e aggiungere il metodo seguente:
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) }
Modificare google in microsoftaccount, twitter, facebook o windowsazureactivedirectory se non si usa Google come provider di identità. Se si usa Facebook sarà necessario consentire i domini Facebook all'interno dell'app.
Sostituire urlScheme con un nome univoco per l'applicazione. Il valore di urlScheme deve corrispondere a quello del protocollo dello schema URL specificato nel campo URL di reindirizzamento esterni consentiti nel portale di Azure. urlScheme viene usato dal callback di autenticazione per tornare all'applicazione dopo aver completato la richiesta di autenticazione.
Rimuovere le righe
self.refreshControl?.beginRefreshing()
eself.onRefresh(self.refreshControl)
alla fine diviewDidLoad()
in ToDoTableViewController.swift. Aggiungere una chiamata aloginAndGetData()
al posto di tali righe:loginAndGetData()
Aprire il file
AppDelegate.swift
e aggiungere la riga seguente alla classeAppDelegate
: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 } }
Sostituire appname con il valore urlScheme usato nel passaggio 1.
Aprire il file
AppName-Info.plist
(sostituendo AppName con il nome dell'app) e aggiungere il codice seguente:<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLName</key> <string>com.microsoft.azure.zumo</string> <key>CFBundleURLSchemes</key> <array> <string>appname</string> </array> </dict> </array>
Questo codice deve essere inserito all'interno dell'elemento
<dict>
. Sostituire la stringa appname (all'interno della matrice per CFBundleURLSchemes) con il nome app scelto nel passaggio 1. È possibile apportare queste modifiche anche nell'editor Plist. Fare clic sul fileAppName-Info.plist
in XCode per aprire l'editor Plist.Sostituire la stringa
com.microsoft.azure.zumo
per CFBundleURLName con l'identificatore del bundle Apple.Premere Esegui per avviare l'app e quindi accedere. Una volta eseguito l'accesso, dovrebbe essere possibile visualizzare l'elenco Todo e apportare modifiche.
L'autenticazione del servizio app usa la comunicazione tra app di Apple. Per altre informazioni su questo argomento, vedere la documentazione Apple