Aggiungere l'autenticazione all'app iOSAdd authentication to your iOS app

Questa esercitazione illustra come aggiungere l'autenticazione al progetto di avvio rapido di iOS tramite un provider di identità supportato.In this tutorial, you add authentication to the [iOS quick start] project using a supported identity provider. Questa esercitazione è basata sull'esercitazione relativa all' avvio rapido di iOS , che deve essere completata per prima.This tutorial is based on the [iOS quick start] tutorial, which you must complete first.

Registrare l'app per l'autenticazione e configurare il servizio appRegister your app for authentication and configure the App Service

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.First, you need to register your app at an identity provider's site, and then you will set the provider-generated credentials in the Mobile Apps back end.

  1. Configurare il provider di identità preferito seguendo le istruzioni specifiche del provider:Configure your preferred identity provider by following the provider-specific instructions:

  2. Ripetere i passaggi precedenti per ogni provider di cui si desidera il supporto nell'app.Repeat the previous steps for each provider you want to support in your app.

Aggiungere l'app agli URL di reindirizzamento esterni consentitiAdd your app to the Allowed External Redirect URLs

L'autenticazione sicura richiede la definizione di un nuovo schema URL per l'app.Secure authentication requires that you define a new URL scheme for your app. In questo modo il sistema di autenticazione reindirizza all'app al termine del processo di autenticazione.This allows the authentication system to redirect back to your app once the authentication process is complete. In questa esercitazione si usa lo schema URL appname.In this tutorial, we use the URL scheme appname throughout. È tuttavia possibile usare QUALSIASI schema URL.However, you can use any URL scheme you choose. Lo schema deve essere univoco per l'applicazione per dispositivi mobili.It should be unique to your mobile application. Per abilitare il reindirizzamento sul lato server:To enable the redirection on th server side:

  1. Nel portale di Azure selezionare il servizio app.In the [Azure portal], select your App Service.

  2. Fare clic sull'opzione di menu Autenticazione/Autorizzazione.Click the Authentication / Authorization menu option.

  3. Fare clic su Azure Active Directory nella sezione Provider di autenticazione.Click Azure Active Directory under the Authentication Providers section.

  4. Impostare Modalità di gestione su Avanzata.Set the Management mode to Advanced.

  5. In URL di reindirizzamento esterni consentiti specificare appname://easyauth.callback.In the Allowed External Redirect URLs, enter appname://easyauth.callback. Il valore appname in questa stringa è lo schema URL per l'applicazione per dispositivi mobili.The appname in this string is the URL Scheme for your mobile application. Deve seguire le normale specifica URL per un protocollo, ovvero usare solo lettere e numeri e iniziare con una lettera.It should follow normal URL specification for a protocol (use letters and numbers only, and start with a letter). È opportuno prendere nota della stringa scelta perché sarà necessario modificare il codice dell'applicazione per dispositivi mobili con lo schema URL in diverse posizioni.You should make a note of the string that you choose as you will need to adjust your mobile application code with the URL Scheme in several places.

  6. Fare clic su OK.Click OK.

  7. Fare clic su Save.Click Save.

Limitare le autorizzazioni agli utenti autenticatiRestrict permissions to authenticated users

Per impostazione predefinita, le API in un back-end dell'app per dispositivi mobili possono essere richiamate in modo anonimo.By default, APIs in a Mobile Apps back end can be invoked anonymously. È necessario limitare l'accesso solo ai client autenticati.Next, you need to restrict access to only authenticated clients.

  • Back-end Node. js nuovamente fine (tramite il Portale di Azure) :Node.js back end (via the Azure portal) :

    Nelle impostazioni dell'app per dispositivi mobili fare clic su Tabelle semplici e selezionare la tabella.In your Mobile Apps settings, click Easy Tables and select your table. Fare clic su Modifica autorizzazioni, selezionare Authenticated access only (Solo accesso con autenticazione) per tutte le autorizzazioni e quindi fare clic su Salva.Click Change permissions, select Authenticated access only for all permissions, and then click Save.

  • Back-end. NET (C#):.NET back end (C#):

    Nel progetto server passare a Controller > TodoItemController.cs.In the server project, navigate to Controllers > TodoItemController.cs. Aggiungere l'attributo [Authorize] alla classe TodoItemController, come indicato di seguito.Add the [Authorize] attribute to the TodoItemController class, as follows. Per limitare l'accesso solo a metodi specifici, è inoltre possibile applicare questo attributo solo a tali metodi anziché alla classe.To restrict access only to specific methods, you can also apply this attribute just to those methods instead of the class. Pubblicare di nuovo il progetto server.Republish the server project.

      [Authorize]
      public class TodoItemController : TableController<TodoItem>
    
  • Back-end Node.js (tramite codice Node.js) :Node.js backend (via Node.js code) :

    Per richiedere l'autenticazione per l'accesso alla tabella, aggiungere la riga seguente allo script del server Node.js:To require authentication for table access, add the following line to the Node.js server script:

      table.access = 'authenticated';
    

    Per altre informazioni, vedere Procedura: Richiedere l'autenticazione per l'accesso alle tabelle.For more details, see How to: Require authentication for access to tables. 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.To learn how to download the quickstart code project from your site, see How to: Download the Node.js backend quickstart code project using Git.

In Xcode fare clic su Esegui per avviare l'app.In Xcode, press Run to start the 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.An exception is raised because the app attempts to access the backend as an unauthenticated user, but the TodoItem table now requires authentication.

Aggiungere l'autenticazione all'appAdd authentication to app

Objective-C:Objective-C:

  1. In Mac aprire QSTodoListViewController.m in Xcode e aggiungere il metodo seguente:On your Mac, open QSTodoListViewController.m in Xcode and add the following method:

    - (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à.Change google to microsoftaccount, twitter, facebook, or windowsazureactivedirectory if you are not using Google as your identity provider. Se si usa Facebook sarà necessario consentire i domini Facebook all'interno dell'app.If you use Facebook, you must whitelist Facebook domains in your app.

    Sostituire urlScheme con un nome univoco per l'applicazione.Replace the urlScheme with a unique name for your application. 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.The urlScheme should be the same as the URL Scheme protocol that you specified in the Allowed External Redirect URLs field in the Azure portal. urlScheme viene usato dal callback di autenticazione per tornare all'applicazione dopo aver completato la richiesta di autenticazione.The urlScheme is used by the authentication callback to switch back to your application after the authentication request is complete.

  2. Sostituire [self refresh] in viewDidLoad in QSTodoListViewController.m con il codice seguente:Replace [self refresh] in viewDidLoad in QSTodoListViewController.m with the following code:

    [self loginAndGetData];
    
  3. Aprire il file QSAppDelegate.h e aggiungere il codice seguente:Open the QSAppDelegate.h file and add the following code:

    #import "QSTodoService.h"
    
    @property (strong, nonatomic) QSTodoService *qsTodoService;
    
  4. Aprire il file QSAppDelegate.m e aggiungere il codice seguente:Open the QSAppDelegate.m file and add the following code:

    - (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.Add this code directly before the line reading #pragma mark - Core Data stack. Sostituire appname con il valore di urlScheme usato nel passaggio 1.Replace the appname wih the urlScheme value that you used in step 1.

  5. Aprire il file AppName-Info.plist (sostituendo AppName con il nome dell'app) e aggiungere il codice seguente:Open the AppName-Info.plist file (replacing AppName with the name of your app), and add the following code:

    <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>.This code should be placed inside the <dict> element. Sostituire la stringa appname (all'interno della matrice per CFBundleURLSchemes) con il nome app scelto nel passaggio 1.Replace the appname string (within the array for CFBundleURLSchemes) with the app name you chose in step 1. È possibile apportare queste modifiche anche nell'editor Plist. Fare clic sul file AppName-Info.plist in XCode per aprire l'editor Plist.You can also make these changes in the plist editor - click on the AppName-Info.plist file in XCode to open the plist editor.

    Sostituire la stringa com.microsoft.azure.zumo per CFBundleURLName con l'identificatore del bundle Apple.Replace the com.microsoft.azure.zumo string for CFBundleURLName with your Apple bundle identifier.

  6. Fare clic su Run (Esegui) per avviare l'app e quindi accedere.Press Run to start the app, and then log in. Una volta eseguito l'accesso, dovrebbe essere possibile visualizzare l'elenco Todo e apportare modifiche.When you are logged in, you should be able to view the Todo list and make updates.

Swift:Swift:

  1. In Mac aprire ToDoTableViewController.swift in Xcode e aggiungere il metodo seguente:On your Mac, open ToDoTableViewController.swift in Xcode and add the following method:

    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à.Change google to microsoftaccount, twitter, facebook, or windowsazureactivedirectory if you are not using Google as your identity provider. Se si usa Facebook sarà necessario consentire i domini Facebook all'interno dell'app.If you use Facebook, you must whitelist Facebook domains in your app.

    Sostituire urlScheme con un nome univoco per l'applicazione.Replace the urlScheme with a unique name for your application. 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.The urlScheme should be the same as the URL Scheme protocol that you specified in the Allowed External Redirect URLs field in the Azure portal. urlScheme viene usato dal callback di autenticazione per tornare all'applicazione dopo aver completato la richiesta di autenticazione.The urlScheme is used by the authentication callback to switch back to your application after the authentication request is complete.

  2. Rimuovere le righe self.refreshControl?.beginRefreshing() e self.onRefresh(self.refreshControl) alla fine di viewDidLoad() in ToDoTableViewController.swift.Remove the lines self.refreshControl?.beginRefreshing() and self.onRefresh(self.refreshControl) at the end of viewDidLoad() in ToDoTableViewController.swift. Aggiungere una chiamata a loginAndGetData() al posto di tali righe:Add a call to loginAndGetData() in their place:

    loginAndGetData()
    
  3. Aprire il file AppDelegate.swift e aggiungere la riga seguente alla classe AppDelegate:Open the AppDelegate.swift file and add the following line to the AppDelegate class:

    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 di urlScheme usato nel passaggio 1.Replace the appname wih the urlScheme value that you used in step 1.

  4. Aprire il file AppName-Info.plist (sostituendo AppName con il nome dell'app) e aggiungere il codice seguente:Open the AppName-Info.plist file (replacing AppName with the name of your app), and add the following code:

    <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>.This code should be placed inside the <dict> element. Sostituire la stringa appname (all'interno della matrice per CFBundleURLSchemes) con il nome app scelto nel passaggio 1.Replace the appname string (within the array for CFBundleURLSchemes) with the app name you chose in step 1. È possibile apportare queste modifiche anche nell'editor Plist. Fare clic sul file AppName-Info.plist in XCode per aprire l'editor Plist.You can also make these changes in the plist editor - click on the AppName-Info.plist file in XCode to open the plist editor.

    Sostituire la stringa com.microsoft.azure.zumo per CFBundleURLName con l'identificatore del bundle Apple.Replace the com.microsoft.azure.zumo string for CFBundleURLName with your Apple bundle identifier.

  5. Fare clic su Run (Esegui) per avviare l'app e quindi accedere.Press Run to start the app, and then log in. Una volta eseguito l'accesso, dovrebbe essere possibile visualizzare l'elenco Todo e apportare modifiche.When you are logged in, you should be able to view the Todo list and make updates.

L'autenticazione del servizio app usa la comunicazione tra app di Apple.App Service Authentication uses Apples Inter-App Communication. Per altre informazioni su questo argomento, vedere la documentazione AppleFor more details on this subject, refer to the Apple Documentation