Compartir a través de


Habilitación de las opciones de autenticación en una aplicación swift de iOS mediante Azure AD B2C

Importante

A partir del 1 de mayo de 2025, Azure AD B2C ya no estará disponible para ser adquirido por nuevos clientes. Obtenga más información en nuestras preguntas más frecuentes.

En este artículo se describen las formas en que puede habilitar, personalizar y mejorar la experiencia de autenticación de Azure Active Directory B2C (Azure AD B2C) para la aplicación Swift de iOS.

Antes de empezar, familiarícese con los siguientes artículos:

Uso de un dominio personalizado

Mediante el uso de un dominio personalizado, puede personalizar completamente la dirección URL de autenticación. Desde la perspectiva del usuario, los usuarios permanecen en el dominio durante el proceso de autenticación, en lugar de redirigirse al nombre de dominio de Azure AD B2C b2clogin.com.

Para quitar todas las referencias a "b2c" en la dirección URL, también puede reemplazar el nombre del inquilino de B2C, contoso.onmicrosoft.com, en la dirección URL de solicitud de autenticación por el GUID del identificador de inquilino. Por ejemplo, puede cambiar https://fabrikamb2c.b2clogin.com/contoso.onmicrosoft.com/ a https://account.contosobank.co.uk/<tenant ID GUID>/.

Para usar un dominio personalizado y el identificador de inquilino en la dirección URL de autenticación, haga lo siguiente:

  1. Siga las instrucciones de Habilitación de dominios personalizados.
  2. Actualice el miembro de clase kAuthorityHostName con su dominio personalizado.
  3. Actualice elkTenantNamemiembro de la clase con su Id. de inquilino.

El código swift siguiente muestra la configuración de la aplicación antes del cambio:

let kTenantName = "contoso.onmicrosoft.com" 
let kAuthorityHostName = "contoso.b2clogin.com" 

El código swift siguiente muestra la configuración de la aplicación después del cambio:

let kTenantName = "00000000-0000-0000-0000-000000000000" 
let kAuthorityHostName = "login.contoso.com" 

Rellenar previamente el nombre de inicio de sesión

Durante un proceso de inicio de sesión del usuario, la aplicación podría dirigirse a un usuario específico. Cuando una aplicación tiene como destino un usuario, puede especificar en la solicitud de autorización el login_hint parámetro de consulta con el nombre de inicio de sesión del usuario. Azure AD B2C rellena automáticamente el nombre de inicio de sesión y el usuario debe proporcionar solo la contraseña.

Para rellenar previamente el nombre de inicio de sesión, haga lo siguiente:

  1. Si usa una directiva personalizada, agregue la notificación de entrada necesaria, como se describe en Configuración del inicio de sesión directo.
  2. Busque el objeto de configuración de la biblioteca de autenticación de Microsoft (MSAL) y luego agregue el método withLoginHint() con la sugerencia de inicio de sesión.
let parameters = MSALInteractiveTokenParameters(scopes: kScopes, webviewParameters: self.webViewParameters!)
parameters.promptType = .selectAccount
parameters.authority = authority
parameters.loginHint = "bob@contoso.com"
// More settings here

applicationContext.acquireToken(with: parameters) { (result, error) in
...

Preseleccionar un proveedor de identidades

Si configuró el recorrido de inicio de sesión de la aplicación para incluir cuentas sociales, como Facebook, LinkedIn o Google, puede especificar el domain_hint parámetro . Este parámetro de consulta proporciona una sugerencia a Azure AD B2C sobre el proveedor de identidades sociales que se debe usar para el inicio de sesión. Por ejemplo, si la aplicación especifica domain_hint=facebook.com, el flujo de inicio de sesión va directamente a la página de inicio de sesión de Facebook.

Para redirigir a los usuarios a un proveedor de identidades externo, haga lo siguiente:

  1. Compruebe el nombre de dominio del proveedor de identidades externo. Para obtener más información, consulte Redireccionamiento del inicio de sesión a un proveedor de redes sociales.
  2. Cree o use un objeto de lista existente para almacenar parámetros de consulta adicionales.
  3. Agregue el domain_hint parámetro con el nombre de dominio correspondiente a la lista (por ejemplo, facebook.com).
  4. Pase la lista de parámetros de consulta adicionales al atributo extraQueryParameters del objeto de configuración de MSAL.
let extraQueryParameters: [String: String] = ["domain_hint": "facebook.com"]

let parameters = MSALInteractiveTokenParameters(scopes: kScopes, webviewParameters: self.webViewParameters!)
parameters.promptType = .selectAccount
parameters.authority = authority
parameters.extraQueryParameters = extraQueryParameters
// More settings here

applicationContext.acquireToken(with: parameters) { (result, error) in
...

Especificar el idioma de la interfaz de usuario

La personalización de idioma en Azure AD B2C permite al flujo de usuario adaptarse a diversas lenguas para satisfacer las necesidades de los clientes. Para obtener más información, consulte Personalización de idioma.

Para establecer el idioma preferido, haga lo siguiente:

  1. Configurar la personalización del idioma.
  2. Cree o use un objeto de lista existente para almacenar parámetros de consulta adicionales.
  3. Agregue el ui_locales parámetro con el código de idioma correspondiente a la lista (por ejemplo, en-us).
  4. Pase la lista de parámetros de consulta adicionales al atributo extraQueryParameters del objeto de configuración de MSAL.
let extraQueryParameters: [String: String] = ["ui_locales": "en-us"]

let parameters = MSALInteractiveTokenParameters(scopes: kScopes, webviewParameters: self.webViewParameters!)
parameters.promptType = .selectAccount
parameters.authority = authority
parameters.extraQueryParameters = extraQueryParameters
// More settings here

applicationContext.acquireToken(with: parameters) { (result, error) in
...

Pasar un parámetro de cadena de consulta personalizado

Con las directivas personalizadas, puede pasar un parámetro de cadena de consulta personalizado. Un buen ejemplo de caso de uso es cuando desea cambiar dinámicamente el contenido de la página.

Para pasar un parámetro de cadena de consulta personalizado, haga lo siguiente:

  1. Configure el elemento ContentDefinitionParameters .
  2. Cree o use un objeto de lista existente para almacenar parámetros de consulta adicionales.
  3. Agregue el parámetro de cadena de consulta personalizado, como campaignId. Establezca el valor del parámetro (por ejemplo, germany-promotion).
  4. Pase la lista de parámetros de consulta adicionales al atributo extraQueryParameters del objeto de configuración de MSAL.
let extraQueryParameters: [String: String] = ["campaignId": "germany-promotion"]

let parameters = MSALInteractiveTokenParameters(scopes: kScopes, webviewParameters: self.webViewParameters!)
parameters.promptType = .selectAccount
parameters.authority = authority
parameters.extraQueryParameters = extraQueryParameters
// More settings here

applicationContext.acquireToken(with: parameters) { (result, error) in
...

Pasar una sugerencia de token de identificador

Una aplicación de parte confiable puede enviar un token web JSON (JWT) entrante como parte de la solicitud de autorización de OAuth2. El token de entrada es una sugerencia sobre el usuario o la solicitud de autorización. Azure AD B2C valida el token y, a continuación, extrae la reclamación.

Para incluir una sugerencia de token de identificador en la solicitud de autenticación, haga lo siguiente:

  1. En la directiva personalizada, defina un perfil técnico de sugerencia para el token de identificador.
  2. En el código, genere o adquiera un token de identificador y, a continuación, establezca el token en una variable (por ejemplo, idToken).
  3. Cree o use un objeto de lista existente para almacenar parámetros de consulta adicionales.
  4. Agregue el id_token_hint parámetro con la variable correspondiente que almacena el token de identificador.
  5. Pase la lista de parámetros de consulta adicionales al atributo extraQueryParameters del objeto de configuración de MSAL.
let extraQueryParameters: [String: String] = ["id_token_hint": idToken]

let parameters = MSALInteractiveTokenParameters(scopes: kScopes, webviewParameters: self.webViewParameters!)
parameters.promptType = .selectAccount
parameters.authority = authority
parameters.extraQueryParameters = extraQueryParameters
// More settings here

applicationContext.acquireToken(with: parameters) { (result, error) in
...

Configurar el registro

La biblioteca MSAL genera mensajes de registro que pueden ayudar a diagnosticar problemas. La aplicación puede configurar el registro. La aplicación también puede proporcionarle un control personalizado sobre el nivel de detalle y si se registran los datos personales y organizativos.

Se recomienda crear una devolución de llamada de registro de MSAL y proporcionar una manera de que los usuarios envíen registros cuando tengan problemas de autenticación. MSAL proporciona estos niveles de detalle de registro:

  • Error: se ha producido un error y se generó un error. Este nivel se usa para depurar e identificar problemas.
  • Advertencia: no se ha producido necesariamente un error o error, pero la información está pensada para diagnósticos e identificación de problemas.
  • Info: MSAL registra eventos destinados a propósitos informativos y no necesariamente para la depuración.
  • Detallado: este es el nivel predeterminado. MSAL registra los detalles completos del comportamiento de la biblioteca.

De forma predeterminada, el registrador de MSAL no captura ningún dato personal o organizativo. La biblioteca le ofrece la opción de habilitar el registro de datos personales y organizativos si decide hacerlo.

El registrador de MSAL debe establecerse lo antes posible en la secuencia de inicio de la aplicación, antes de que se realicen las solicitudes de MSAL. Configure el registro de MSAL en el método AppDelegate.swiftapplication.

El siguiente fragmento de código muestra cómo configurar el registro de MSAL:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        
        MSALGlobalConfig.loggerConfig.logLevel = .verbose
        MSALGlobalConfig.loggerConfig.setLogCallback { (logLevel, message, containsPII) in
            
            // If PiiLoggingEnabled is set YES, this block will potentially contain sensitive information (Personally Identifiable Information), but not all messages will contain it.
            // containsPII == YES indicates if a particular message contains PII.
            // You might want to capture PII only in debug builds, or only if you take necessary actions to handle PII properly according to legal requirements of the region
            if let displayableMessage = message {
                if (!containsPII) {
                    #if DEBUG
                    // NB! This sample uses print just for testing purposes
                    // You should only ever log to NSLog in debug mode to prevent leaking potentially sensitive information
                    print(displayableMessage)
                    #endif
                }
            }
        }
        return true
    }

Experiencia de vista web incrustada

Los exploradores web son necesarios para la autenticación interactiva. De forma predeterminada, la biblioteca MSAL usa la vista web del sistema. Durante el inicio de sesión, la biblioteca MSAL abre la vista web del sistema iOS con la interfaz de usuario de Azure AD B2C.

Para obtener más información, consulte el artículo Personalizar exploradores y WebViews para iOS/macOS .

En función de sus requisitos, puede usar la vista web insertada. Hay diferencias de comportamiento de inicio de sesión único y visual entre la vista web insertada y la vista web del sistema en MSAL.

Captura de pantalla que muestra la diferencia entre la experiencia de vista web del sistema y la experiencia de vista web insertada.

Importante

Se recomienda usar el valor predeterminado de la plataforma, que normalmente es el explorador del sistema. El explorador del sistema es mejor para recordar a los usuarios que han iniciado sesión anteriormente. Algunos proveedores de identidades, como Google, no admiten una experiencia de vista insertada.

Para cambiar este comportamiento, cambie el webviewType atributo de MSALWebviewParameters a wkWebView. En el ejemplo siguiente se muestra cómo cambiar el tipo de vista web a vista incrustada:

func initWebViewParams() {
    self.webViewParameters = MSALWebviewParameters(authPresentationViewController: self)
    
    // Use embedded view experience
    self.webViewParameters?.webviewType = .wkWebView
}

Pasos siguientes