Inicio rápido: Inicio de sesión de usuarios y llamada a Microsoft Graph desde una aplicación de iOS o macOS

En este inicio rápido descargará y ejecutará un código de ejemplo que muestra cómo una aplicación nativa de iOS o macOS puede realizar el inicio de sesión de usuarios y obtener un token de acceso para llamar a Microsoft Graph API.

Este inicio rápido va dirigido a las aplicaciones de iOS y macOS. Algunos pasos solo son necesarios para las aplicaciones de iOS y así se indicará.

Requisitos previos

Funcionamiento del ejemplo

Diagrama que muestra el funcionamiento de la aplicación de muestra que se ha generado en este artículo de inicio rápido.

Registre su aplicación de inicio rápido

Sugerencia

Los pasos de este artículo pueden variar ligeramente en función del portal desde donde comienza.

Para registrar la aplicación y agregar la información de registro de la aplicación a la solución de forma manual, siga estos pasos:

  1. Inicie sesión en el Centro de administración de Microsoft Entra al menos como Desarrollador de aplicaciones.
  2. Si tiene acceso a varios inquilinos, use el icono Configuración del menú superior para cambiar al inquilino en el que desea registrar la aplicación desde el menú Directorios y suscripciones.
  3. Vaya aIdentidad>Aplicaciones>Registros de aplicaciones.
  4. Seleccione Nuevo registro.
  5. Escriba el nombre de la aplicación. Los usuarios de la aplicación pueden ver este nombre, el cual se puede cambiar más tarde.
  6. Seleccione Registrar.
  7. En Administrar, seleccione Autenticación>Agregar una plataforma>iOS.
  8. Escriba el identificador de agrupación de la aplicación. El identificador de agrupación es una cadena única que identifica de forma exclusiva la aplicación, por ejemplo com.<yourname>.identitysample.MSALMacOS. Anote el valor que usa. Tenga en cuenta que la configuración de iOS también va dirigida a las aplicaciones de macOS.
  9. Seleccione Configurar y guarde los detalles de Configuración de MSAL para un momento posterior de este inicio rápido.
  10. Seleccione Listo.

Paso 2: Descarga del proyecto de ejemplo

Paso 3: Instalar dependencias

  1. Extraiga el archivo ZIP.
  2. En una ventana de terminal, vaya a la carpeta con el ejemplo de código descargado y ejecute pod install para instalar la biblioteca de MSAL más reciente.

Paso 4: Configuración del proyecto

Si ha seleccionado la opción 1 anterior, puede omitir estos pasos.

  1. En Xcode, abra el proyecto.

  2. Edite ViewController.swift y reemplace la línea que empieza con "let kClientID" por el siguiente fragmento de código: No olvide actualizar el valor de kClientID con el identificador de cliente que guardó al registrar la aplicación anteriormente en este inicio rápido:

    let kClientID = "Enter_the_Application_Id_Here"
    
  3. Si va a crear una aplicación para nubes nacionales de Microsoft Entra, reemplace la línea que empieza por “let kGraphEndpoint” y “let kAuthority” por los puntos de conexión correctos. Para el acceso global, use los valores predeterminados:

    let kGraphEndpoint = "https://graph.microsoft.com/"
    let kAuthority = "https://login.microsoftonline.com/common"
    
  4. Los demás puntos de conexión se documentan aquí. Por ejemplo, para ejecutar el inicio rápido con Microsoft Entra Alemania, use lo siguiente:

    let kGraphEndpoint = "https://graph.microsoft.de/"
    let kAuthority = "https://login.microsoftonline.de/common"
    
  5. Abra la configuración del proyecto. En la sección Identidad, escriba el Identificador de agrupación.

  6. Haga clic con el botón derecho en Info.plist y seleccione Abrir como>Código fuente.

  7. En el nodo raíz dict, reemplace Enter_the_bundle_Id_Here por el identificador de agrupación que usó en el portal. Observe el prefijo msauth. de la cadena.

    <key>CFBundleURLTypes</key>
    <array>
       <dict>
          <key>CFBundleURLSchemes</key>
          <array>
             <string>msauth.Enter_the_Bundle_Id_Here</string>
          </array>
       </dict>
    </array>
    
  8. Compile y ejecute la aplicación.

Más información

Lea estas secciones para obtener más información sobre esta guía de inicio rápido.

Obtención de MSAL

MSAL (MSAL.framework) es la biblioteca que se usa para iniciar la sesión de los usuarios y solicitar los tokens que se usan para acceder a una API protegida por la Plataforma de identidad de Microsoft. Puede agregar MSAL a la aplicación mediante el proceso siguiente:

$ vi Podfile

Agregue lo siguiente a este podfile (con el destino de su proyecto):

use_frameworks!

target 'MSALiOS' do
   pod 'MSAL'
end

Ejecute el comando de instalación de CocoaPods:

pod install

Inicializar MSAL

Puede agregar la referencia de MSAL con el código siguiente:

import MSAL

A continuación, realice la inicialización de MSAL con el siguiente código:

let authority = try MSALAADAuthority(url: URL(string: kAuthority)!)

let msalConfiguration = MSALPublicClientApplicationConfig(clientId: kClientID, redirectUri: nil, authority: authority)
self.applicationContext = try MSALPublicClientApplication(configuration: msalConfiguration)
Donde: Descripción
clientId El identificador de aplicación de la aplicación registrada en portal.azure.com
authority La plataforma de identidad de Microsoft. En la mayoría de los casos, será https://login.microsoftonline.com/common.
redirectUri URI de redireccionamiento de la aplicación. Puede pasar "nil" para usar el valor predeterminado o su URI de redireccionamiento personalizado.

Solo en iOS, requisitos adicionales de la aplicación

La aplicación también debe tener lo siguiente en AppDelegate. Esto permite que el SDK de MSAL controle la respuesta del token desde la aplicación de agente de autenticación cuando realice la autenticación.

func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {

    return MSALPublicClientApplication.handleMSALResponse(url, sourceApplication: options[UIApplication.OpenURLOptionsKey.sourceApplication] as? String)
}

Nota:

En iOS 13+, si adopta UISceneDelegate en lugar de UIApplicationDelegate, coloque este código en la devolución de llamada scene:openURLContexts: (consulte la documentación de Apple). Si admite UISceneDelegate y UIApplicationDelegate para la compatibilidad con sistemas operativos iOS anteriores, la devolución de llamada de MSAL debe colocarse en ambos lugares.

func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {

   guard let urlContext = URLContexts.first else {
      return
   }

   let url = urlContext.url
   let sourceApp = urlContext.options.sourceApplication

   MSALPublicClientApplication.handleMSALResponse(url, sourceApplication: sourceApp)
}

Por último, la aplicación debe tener una entrada LSApplicationQueriesSchemes en Info.plist junto con CFBundleURLTypes. El ejemplo incluye esto.

<key>LSApplicationQueriesSchemes</key>
<array>
   <string>msauthv2</string>
   <string>msauthv3</string>
</array>

Inicio de sesión de usuarios y solicitud de tokens

MSAL tiene dos métodos para adquirir tokens: acquireToken y acquireTokenSilent.

acquireToken: Obtención de un token interactivamente

Algunas situaciones requieren que los usuarios interactúen con la plataforma de identidad de Microsoft. En estos casos, puede que sea necesario que el usuario final seleccione su cuenta, escriba sus credenciales o dé su consentimiento a los permisos de la aplicación. Por ejemplo,

  • La primera vez que los usuarios inician sesión en la aplicación
  • Si un usuario restablece su contraseña, deberá escribir sus credenciales.
  • Cuando la aplicación solicita acceso a un recurso por primera vez.
  • Cuando se requieren MFA u otras directivas de acceso condicional.
let parameters = MSALInteractiveTokenParameters(scopes: kScopes, webviewParameters: self.webViewParamaters!)
self.applicationContext!.acquireToken(with: parameters) { (result, error) in /* Add your handling logic */}
Donde: Descripción
scopes Contiene los ámbitos que se solicitan (es decir, [ "user.read" ] para Microsoft Graph o [ "<Application ID URL>/scope" ] para las API web personalizadas [api://<Application ID>/access_as_user])

acquireTokenSilent: Obtención de un token de acceso de forma automática

Las aplicaciones no requieren que sus usuarios inicien sesión cada vez que soliciten un token. Si el usuario ya ha iniciado sesión, este método permite que las aplicaciones soliciten tokens de forma silenciosa.

self.applicationContext!.getCurrentAccount(with: nil) { (currentAccount, previousAccount, error) in

   guard let account = currentAccount else {
      return
   }

   let silentParams = MSALSilentTokenParameters(scopes: self.kScopes, account: account)
   self.applicationContext!.acquireTokenSilent(with: silentParams) { (result, error) in /* Add your handling logic */}
}
Donde: Descripción
scopes Contiene los ámbitos que se solicitan (es decir, [ "user.read" ] para Microsoft Graph o [ "<Application ID URL>/scope" ] para las API web personalizadas [api://<Application ID>/access_as_user])
account La cuenta para la que se solicita un token. Este inicio rápido trata de una aplicación de una sola cuenta. Si quiere compilar una aplicación de varias cuentas, deberá definir una lógica para identificar qué cuenta usar para las solicitudes de token que usen accountsFromDeviceForParameters:completionBlock: y pasen el accountIdentifier correcto.

Ayuda y soporte técnico

Si necesita ayuda, desea informar de un problema o desea obtener información sobre las opciones de soporte técnico, consulte Opciones de ayuda y soporte técnico para desarrolladores.

Pasos siguientes

Pase al tutorial paso a paso en el que se crea una aplicación de iOS o macOS que obtiene un token de acceso de la plataforma de identidad de Microsoft y se usa para llamar a Microsoft Graph API.