Ajout de l'authentification à votre application iOS

Dans ce didacticiel, vous allez ajouter l’authentification au projet de Démarrage rapide iOS en faisant appel à un fournisseur d’identité pris en charge. Ce didacticiel est basé sur le didacticiel Démarrage rapide iOS , que vous devez effectuer en premier.

Inscription de votre application pour l’authentification et configuration d’App Service

Commencez par inscrire votre application auprès d’un site de fournisseur d’identité, puis définissez les informations d’identification générées par le fournisseur dans le serveur principal Mobile Apps.

  1. Configurez votre fournisseur d’identité en suivant les instructions correspondantes :

  2. Répétez les étapes précédentes pour chaque fournisseur que vous souhaitez prendre en charge dans votre application.

Ajouter votre application aux URL de redirection externes autorisées

L’authentification sécurisée nécessite de définir un nouveau schéma d’URL pour votre application. Cela permet au système d’authentification de vous rediriger vers votre application une fois le processus d’authentification terminé. Dans ce didacticiel, nous utilisons le schéma d’URL appname. Toutefois, vous pouvez utiliser le schéma d’URL de votre choix. Il doit être propre à votre application mobile. Pour activer la redirection côté serveur :

  1. Dans le portail Azure, sélectionnez votre instance App Service.

  2. Cliquez sur l’option de menu Authentication/Authorisation.

  3. Sous la section Fournisseurs d’authentification, cliquez sur Azure Active Directory.

  4. Définissez le mode de gestion sur Avancé.

  5. Dans URL de redirection externes autorisées, saisissez appname://easyauth.callback. La chaîne appname de cette chaîne est le schéma d’URL de votre application mobile. Elle doit être conforme à la spécification d’URL normale pour un protocole (utiliser des lettres et des chiffres uniquement et commencer par une lettre). Vous devez noter la chaîne que vous choisissez, dans la mesure où vous devez ajuster votre code d’application mobile avec le schéma d’URL à plusieurs endroits.

  6. Cliquez sur OK.

  7. Cliquez sur Enregistrer.

Restriction des autorisations pour les utilisateurs authentifiés

Par défaut, les API d’un serveur principal Mobile Apps peuvent être appelées de manière anonyme. Vous devez ensuite restreindre l’accès aux clients authentifiés uniquement.

  • Serveur principal Node.js (par le biais du Portail Azure) :

    Dans vos paramètres Mobile Apps, cliquez sur Tables faciles et sélectionnez votre table. Cliquez sur Modifier les autorisations, sélectionnez Accès authentifié uniquement pour toutes les autorisations, puis cliquez sur Enregistrer.

  • Serveur principal .NET (C#) :

    Dans le projet serveur, accédez à Contrôleurs>TodoItemController.cs. Ajoutez l’attribut [Authorize] à la classe TodoItemController comme suit : Pour restreindre l’accès à des méthodes spécifiques, vous pouvez également appliquer cet attribut à ces méthodes uniquement au lieu de la classe. Publier à nouveau le projet de serveur

      [Authorize]
      public class TodoItemController : TableController<TodoItem>
    
  • Serveur principal Node.js (via le code Node.js) :

    Pour demander l’authentification pour l’accès des tables, ajoutez la ligne suivante au script de serveur Node.js :

      table.access = 'authenticated';
    

    Pour plus d’informations, consultez la section Procédure : exiger une authentification pour l’accès aux tables. Pour savoir comment télécharger le projet de code de démarrage rapide de votre site, consultez Procédure : télécharger le projet de code de démarrage rapide du serveur principal Node.js à l’aide de Git.

Dans Xcode, appuyez sur Exécuter pour démarrer l’application. Une exception se déclenche, car l’application essaye d’accéder au serveur principal en tant qu’utilisateur non authentifié alors que la table TodoItem requiert désormais l’authentification.

Ajouter l’authentification à l’application

Objectif C :

  1. Sur votre Mac, ouvrez QSTodoListViewController.m dans Xcode et ajoutez la méthode suivante :

    - (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];
            }
        }];
    }
    

    Remplacez google par microsoftaccount, twitter, facebook ou windowsazureactivedirectory si vous n’utilisez pas Google comme fournisseur d’identité. Si vous utilisez Facebook, vous devez autoriser les domaines Facebook dans votre application.

    Remplacez urlScheme par un nom unique pour votre application. La chaîne urlScheme doit être identique au protocole de schéma d’URL spécifié dans le champ URL de redirection externes autorisés dans le portail Azure. La chaîne urlScheme est utilisée par le rappel d’authentification pour revenir à votre application une fois la demande d’authentification terminée.

  2. Remplacez [self refresh] dans viewDidLoad dans QSTodoListViewController.m par le code suivant :

    [self loginAndGetData];
    
  3. Ouvrez le fichierQSAppDelegate.h et ajoutez le code suivant :

    #import "QSTodoService.h"
    
    @property (strong, nonatomic) QSTodoService *qsTodoService;
    
  4. Ouvrez le fichierQSAppDelegate.m et ajoutez le code suivant :

    - (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;
        }
    }
    

    Ajoutez ce code juste avant la lecture de la ligne #pragma mark - Core Data stack. Remplacez la chaîne appname par la valeur de urlScheme utilisée à l’étape 1.

  5. Ouvrez le fichier AppName-Info.plist (en remplaçant AppName par le nom de votre application) et ajoutez le code suivant :

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

    Ce code doit être placé dans l’élément <dict>. Remplacez la chaîne appname (dans le tableau pour CFBundleURLSchemes) par le nom d’application choisi à l’étape 1. Vous pouvez également effectuer ces modifications dans l’éditeur plist - cliquez sur le fichier AppName-Info.plist dans XCode pour ouvrir l’éditeur plist.

    Remplacez la chaîne com.microsoft.azure.zumo pour CFBundleURLName par votre identifiant d’offre groupée Apple.

  6. Appuyez sur Exécuter pour démarrer l’application, puis connectez-vous. Une fois connecté, vous devez être en mesure d’afficher la liste des tâches et d’effectuer des mises à jour.

Swift :

  1. Sur votre Mac, ouvrez ToDoTableViewController.swift dans Xcode et ajoutez la méthode suivante :

    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)
    
    }
    

    Remplacez google par microsoftaccount, twitter, facebook ou windowsazureactivedirectory si vous n’utilisez pas Google comme fournisseur d’identité. Si vous utilisez Facebook, vous devrez autoriser les domaines Facebook dans votre application.

    Remplacez urlScheme par un nom unique pour votre application. La chaîne urlScheme doit être identique au protocole de schéma d’URL spécifié dans le champ URL de redirection externes autorisés dans le portail Azure. La chaîne urlScheme est utilisée par le rappel d’authentification pour revenir à votre application une fois la demande d’authentification terminée.

  2. Supprimez les lignes self.refreshControl?.beginRefreshing() et self.onRefresh(self.refreshControl) à la fin de viewDidLoad() dans ToDoTableViewController.swift. Ajoutez un appel à loginAndGetData() à leur place :

    loginAndGetData()
    
  3. Ouvrez le fichier AppDelegate.swift et ajoutez la ligne de suivante à la classe AppDelegate :

    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
        }
    }
    

    Remplacez la chaîne appname par la valeur de urlScheme utilisée à l’étape 1.

  4. Ouvrez le fichier AppName-Info.plist (en remplaçant AppName par le nom de votre application) et ajoutez le code suivant :

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

    Ce code doit être placé dans l’élément <dict>. Remplacez la chaîne appname (dans le tableau pour CFBundleURLSchemes) par le nom d’application choisi à l’étape 1. Vous pouvez également effectuer ces modifications dans l’éditeur plist - cliquez sur le fichier AppName-Info.plist dans XCode pour ouvrir l’éditeur plist.

    Remplacez la chaîne com.microsoft.azure.zumo pour CFBundleURLName par votre identifiant d’offre groupée Apple.

  5. Appuyez sur Exécuter pour démarrer l’application, puis connectez-vous. Une fois connecté, vous devez être en mesure d’afficher la liste des tâches et d’effectuer des mises à jour.

L’authentification App Service utilise la communication inter-application d’Apple. Pour plus d’informations sur ce sujet, reportez-vous à la Documentation Apple