Incorporación de la autenticación a la aplicación iOS

En este tutorial podrá agregar la autenticación al proyecto de inicio rápido de iOS mediante un proveedor de identidades compatible. Este tutorial está basado en el tutorial de inicio rápido de iOS , que debe completar primero.

Registro de la aplicación para la autenticación y configuración de App Service

En primer lugar, debe registrar la aplicación en el sitio del proveedor de identidades y, a continuación, establecerá las credenciales generadas por el proveedor en el back-end de Mobile Apps.

  1. Configure el proveedor de identidades preferido siguiendo las instrucciones específicas del proveedor:

  2. Repita los pasos anteriores para cada proveedor que desee admitir en su aplicación.

Adición de la aplicación a las direcciones URL de redirección externa permitidas

La autenticación segura requiere que se defina un nuevo esquema de dirección URL para la aplicación. Esto permite que el sistema de autenticación se redirija a la aplicación una vez completado el proceso de autenticación. En este tutorial, se usará el esquema de dirección URL appname. Sin embargo, puede utilizar cualquier otro esquema de dirección URL que elija. Debe ser único para la aplicación móvil. Para habilitar la redirección en el lado de servidor:

  1. En Azure Portal, seleccione el servicio App Service.

  2. Haga clic en la opción de menú Autenticación/autorización.

  3. Haga clic en Azure Active Directory en la sección Proveedores de autenticación.

  4. Establezca el modo de administración en Avanzado.

  5. En URL de redirección externas permitidas, introduzca appname://easyauth.callback. El valor de appname de esta cadena es el esquema de dirección URL para la aplicación móvil. Debe seguir la especificación normal de las direcciones URL para un protocolo (usar únicamente letras y números, y comenzar por una letra). Debe tomar nota de la cadena que elija ya que necesitará ajustar el código de la aplicación móvil con el esquema de direcciones URL en varios sitios.

  6. Haga clic en OK.

  7. Haga clic en Save(Guardar).

Restricción de los permisos para los usuarios autenticados

De forma predeterminada, se pueden invocar las API en un back-end de Mobile Apps de forma anónima. A continuación, deberá restringir el acceso a solo los clientes autenticados.

  • Back-end de Node.js (a través de Azure Portal):

    En la configuración de Mobile Apps, haga clic en Tablas sencillas y seleccione la tabla. Haga clic en Cambiar permisos, seleccione Solo acceso autenticado para todos los permisos y luego haga clic en Guardar.

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

    En el proyecto de servidor, vaya a Controllers>TodoItemController.cs. Agregue el atributo [Authorize] a la clase TodoItemController , como sigue. Para restringir el acceso solo a determinados métodos, también puede aplicar este atributo solo a esos métodos en lugar de la clase. Vuelva a publicar el proyecto de servidor.

      [Authorize]
      public class TodoItemController : TableController<TodoItem>
    
  • Back-end de Node.js (a través del código de Node.js) :

    Para pedir autenticación para acceder a las tablas, agregue la siguiente línea al script del servidor de Node.js:

      table.access = 'authenticated';
    

    Para más información, consulte Autenticación necesaria para el acceso a las tablas. Para obtener información sobre cómo descargar el proyecto de código de inicio rápido desde su sitio, consulte Cómo: descargar el proyecto de código de inicio rápido de back-end de Node.js con Git.

En Xcode, presione Ejecutar para iniciar la aplicación. Se genera una excepción porque la aplicación intenta acceder al back-end como usuario sin autenticar, pero la tabla TodoItem ahora requiere autenticación.

Incorporación de autenticación a la aplicación

Objective-C:

  1. En el Mac, abra QSTodoListViewController.m en Xcode y agregue el siguiente método:

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

    Cambie google a microsoftaccount, twitter, facebook o windowsazureactivedirectory si no usa Google como su proveedor de identidades. Si usas Facebook, debes permitir la lista de dominios de Facebook en tu aplicación.

    Reemplace urlScheme por un nombre único para la aplicación. El valor de urlScheme debe ser el mismo que el protocolo de esquema de dirección URL que especificó en el campo URL de redirección externas permitidas de Azure Portal. urlScheme se utiliza en la devolución de llamada de autenticación para volver a la aplicación una vez completada la solicitud de autenticación.

  2. Reemplace [self refresh] en viewDidLoad en QSTodoListViewController.m por el código siguiente:

    [self loginAndGetData];
    
  3. Abra el archivo QSAppDelegate.h y agregue el código siguiente:

    #import "QSTodoService.h"
    
    @property (strong, nonatomic) QSTodoService *qsTodoService;
    
  4. Abra el archivo QSAppDelegate.m y agregue el código siguiente:

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

    Agregue este código directamente antes de la línea #pragma mark - Core Data stack. Reemplace el valor de appname por el valor de urlScheme que ha usado en el paso 1.

  5. Abra el archivo AppName-Info.plist (reemplazando AppName por el nombre de la aplicación) y agregue el código siguiente:

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

    Este código debe colocarse dentro del elemento <dict>. Reemplace la cadena appname (dentro de la matriz de CFBundleURLSchemes) por el nombre de la aplicación que eligió en el paso 1. También puede realizar estos cambios en el editor plist; haga clic en el archivo AppName-Info.plist en XCode para abrir el editor de plist.

    Reemplace la cadena com.microsoft.azure.zumo de CFBundleURLName por el identificador del grupo Apple.

  6. Presione Ejecutar para iniciar la aplicación y, después, inicie sesión. Una vez que haya iniciado sesión, debería poder ver la lista de tareas pendientes y realizar actualizaciones en ella.

SWIFT:

  1. En el Mac, abra ToDoTableViewController.swift en Xcode y agregue el siguiente método:

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

    Cambie google a microsoftaccount, twitter, facebook o windowsazureactivedirectory si no usa Google como su proveedor de identidades. Si usa Facebook, debe incluir los dominios de Facebook en la lista de permitidos en su aplicación.

    Reemplace urlScheme por un nombre único para la aplicación. El valor de urlScheme debe ser el mismo que el protocolo de esquema de dirección URL que especificó en el campo URL de redirección externas permitidas de Azure Portal. urlScheme se utiliza en la devolución de llamada de autenticación para volver a la aplicación una vez completada la solicitud de autenticación.

  2. Quite las líneas self.refreshControl?.beginRefreshing() y self.onRefresh(self.refreshControl) al final de viewDidLoad() en ToDoTableViewController.swift. Agregue una llamada a loginAndGetData() en su lugar:

    loginAndGetData()
    
  3. Abra el archivo AppDelegate.swift y agregue la siguiente línea a la clase 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
        }
    }
    

    Reemplace el valor de appname por el valor de urlScheme que ha usado en el paso 1.

  4. Abra el archivo AppName-Info.plist (reemplazando AppName por el nombre de la aplicación) y agregue el código siguiente:

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

    Este código debe colocarse dentro del elemento <dict>. Reemplace la cadena appname (dentro de la matriz de CFBundleURLSchemes) por el nombre de la aplicación que eligió en el paso 1. También puede realizar estos cambios en el editor plist; haga clic en el archivo AppName-Info.plist en XCode para abrir el editor de plist.

    Reemplace la cadena com.microsoft.azure.zumo de CFBundleURLName por el identificador del grupo Apple.

  5. Presione Ejecutar para iniciar la aplicación y, después, inicie sesión. Una vez que haya iniciado sesión, debería poder ver la lista de tareas pendientes y realizar actualizaciones en ella.

La autenticación de App Service utiliza Apple Inter-App Communication. Para obtener más detalles sobre este tema, consulte la documentación de Apple.