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

¡Bienvenido! Probablemente esta no sea la página que esperaba. Mientras trabajamos en una corrección, este vínculo debería llevarle al artículo correcto:

Inicio rápido: Aplicación de iOS o macOS que inicia la sesión de los usuarios y llama a una API web

Lamentamos las molestias y agradecemos su paciencia mientras trabajamos para resolverlo.

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

Shows how the sample app generated by this quickstart works

Paso 1: Configuración de la aplicación

Para que el código de ejemplo de este inicio rápido funcione, agregue un identificador URI de redirección compatible con el agente de autenticación.

Already configured La aplicación está configurada con estos atributos

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: La aplicación está configurada y lista para ejecutarse

Hemos configurado el proyecto con los valores de las propiedades de su aplicación y está preparado para ejecutarse.

Nota:

Enter_the_Supported_Account_Info_Here

  1. Si va a crear una aplicación para nubes nacionales de Azure AD, 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"
    
  2. Los demás puntos de conexión se documentan aquí. Por ejemplo, para ejecutar el inicio rápido con Azure AD Alemania, use lo siguiente:

    let kGraphEndpoint = "https://graph.microsoft.de/"
    let kAuthority = "https://login.microsoftonline.de/common"
    
  3. Abra la configuración del proyecto. En la sección Identidad, escriba el identificador de agrupación que especificó en el portal.

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

  5. 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>
    
  6. 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 & 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.