> ## Documentation Index
> Fetch the complete documentation index at: https://translations.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Describe cómo instalar, usar y configurar las opciones del SDK de iOS Guardian.swift.

# SDK de iOS Guardian.swift

[Guardian.swift](https://github.com/auth0/Guardian.swift) le permite integrar el servicio Guardian de autenticación multifactor de Auth0 en su propia aplicación de iOS, transformándola en el segundo factor. Sus usuarios obtendrán todos los beneficios de nuestra <Tooltip tip="Autenticación multifactor (MFA): proceso de autenticación de usuarios que utiliza un factor además del nombre de usuario y la contraseña, como un código por SMS." cta="Ver glosario" href="/es/docs/glossary?term=multi-factor+authentication">autenticación multifactor</Tooltip> sin fricciones directamente desde su aplicación. Para obtener más información, lea [Primeros pasos con Apple Push Notification Service](/es/docs/secure/multi-factor-authentication/multi-factor-authentication-factors/configure-push-notifications-for-mfa#configure-push-notifications-for-apple-using-apn-).

<div id="requirements">
  ## Requisitos
</div>

* Se requiere iOS 10+ y Swift 4.1 para usar Guardian.
* Para usar este SDK, debes configurar el servicio Guardian de tu inquilino con tus propias credenciales de notificaciones push; de lo contrario, no recibirás ninguna notificación push. Para obtener más información, consulta [Configure Push Notifications for MFA](/es/docs/secure/multi-factor-authentication/multi-factor-authentication-factors/configure-push-notifications-for-mfa).

<div id="install-guardian-ios-sdk">
  ## Instale el SDK de Guardian para iOS
</div>

<div id="cocoapods">
  ### CocoaPods
</div>

Guardian.swift está disponible mediante [CocoaPods](http://cocoapods.org). Para instalarlo, agrega la siguiente línea a tu Podfile:

```bash lines theme={null}
pod 'Guardian', '~> 1.1.0'
```

<div id="carthage">
  ### Carthage
</div>

Agrega esta línea a tu archivo Cartfile:

```bash lines theme={null}
github "auth0/Guardian.swift" ~> 1.1.0
```

<div id="enable-guardian-push-notifications">
  ## Habilitar las notificaciones push de Guardian
</div>

1. Ve a [Dashboard > Seguridad > Autenticación multifactor](https://manage.auth0.com/#/guardian).
2. Activa la opción **Push Notification** para habilitarla.
3. [Configura las notificaciones push](/es/docs/secure/multi-factor-authentication/multi-factor-authentication-factors/configure-push-notifications-for-mfa#configure-push-notifications-for-apple-using-apn-).

<div id="usage">
  ## Uso
</div>

`Guardian` es el componente principal del SDK. Para usar el SDK, importa la biblioteca:

```swift lines theme={null}
import Guardian
```

Configura el dominio de tu inquilino. O usa el <Tooltip tip="Dominio personalizado: dominio de terceros con un nombre específico o de marca." cta="Ver glosario" href="/es/docs/glossary?term=custom+domain">dominio personalizado</Tooltip> si configuraste uno para tu inquilino:

```swift lines theme={null}
let domain = "<tenant>.<region>.auth0.com"
```

<div id="enroll">
  ### Inscribir
</div>

Una inscripción es un vínculo entre el segundo factor y una cuenta de Auth0. Cuando una cuenta esté inscrita, deberás proporcionar el segundo factor necesario para verificar la identidad. Si tu aplicación aún no usa notificaciones push o no estás familiarizado con ellas, consulta [Apple Push Notification Service Overview](https://developer.apple.com/go/?id=push-notifications) para obtener más información.

Para una inscripción necesitas la siguiente información, además del dominio de tu inquilino:

| Variable           | Descripción                                                                                                                                      |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Enrollment URI** | Valor codificado en el código QR escaneado desde Guardian Web Widget o en el ticket de inscripción que se te envió por correo electrónico o SMS. |
| **APNS Token**     | Token APNS de Apple para el dispositivo. Debe ser una cadena que contenga los 64 bytes (en formato hexadecimal).                                 |
| **Key Pair**       | Un par de claves RSA (privada/pública) que se usa para acreditar tu identidad ante Auth0 Guardian.                                               |

Después de tener esta información, puedes inscribir tu dispositivo:

```swift lines theme={null}
Guardian
        .enroll(forDomain: "{yourTenantDomain}",
                usingUri: "{enrollmentUri}",
                notificationToken: "{apnsToken}",
                signingKey: signingKey,
                verificationKey: verificationKey
                )
        .start { result in
            switch result {
            case .success(let enrolledDevice):
                // éxito, tenemos los datos del dispositivo inscrito disponibles
            case .failure(let cause):
                // algo falló, revisa cause para ver qué salió mal
            }
        }
```

Si la operación se completa correctamente, obtendrás la información de inscripción, que debe almacenarse de forma segura en tu aplicación. Esta información incluye el identificador de inscripción y el token de la API de Guardian asociado a tu dispositivo para actualizar o eliminar tu inscripción.

<div id="signing-and-verification-keys">
  #### Claves de firma y verificación
</div>

Guardian.swift proporciona una clase auxiliar para generar una clave de firma:

```swift lines theme={null}
let signingKey = try DataRSAPrivateKey.new()
```

Esta clave solo existe en memoria, pero puedes obtener su representación `Data` y almacenarla de forma segura, por ejemplo, en una SQLiteDB cifrada:

```javascript lines theme={null}
// Almacenar datos
let data = signingKey.data
// realizar el almacenamiento

// Cargar desde el almacenamiento
let loadedKey = try DataRSAPrivateKey(data: data)
```

Pero si solo quieres almacenarlo en el llavero de iOS:

```swift wrap lines theme={null}
let signingKey = try KeychainRSAPrivateKey.new(with: "com.myapp.mytag")
```

El ejemplo anterior crea una clave y la almacena automáticamente bajo la etiqueta proporcionada. Si desea recuperarla, puede usar la etiqueta:

```swift wrap lines theme={null}
let signingKey = try KeychainRSAPrivateKey(tag: "com.myapp.mytag")
```

La clave de verificación se puede obtener simplemente de cualquier `SigningKey`, por ejemplo:

```swift lines theme={null}
let verificationKey = try signingKey.verificationKey()
```

<div id="allow-login-requests">
  ### Permitir solicitudes de inicio de sesión
</div>

Una vez que haya configurado la inscripción, recibirá una notificación push cada vez que el usuario deba validar su identidad con MFA. Guardian proporciona un método para analizar los datos recibidos de APNs y devolver una instancia de `Notification` lista para usar.

```swift lines theme={null}
if let notification = Guardian.notification(from: notificationPayload) {
    // hemos recibido una notificación push de Guardian
}
```

Una vez que tengas la instancia de la notificación, puedes aprobar fácilmente la solicitud de autenticación con el método `allow`. También necesitarás cierta información del dispositivo inscrito que obtuviste anteriormente. En caso de que tengas más de una inscripción, tendrás que encontrar la que tenga el mismo `id` que la notificación (la propiedad `enrollmentId`).

Cuando tengas la información, el parámetro `device` puede ser cualquier objeto que implemente el protocolo `AuthenticatedDevice`:

```swift lines theme={null}
struct Authenticator: Guardian.AuthenticationDevice {
    let signingKey: SigningKey
    let localIdentifier: String
}
```

El identificador local es el id local del dispositivo; de forma predeterminada, al inscribirse se usa `UIDevice.current.identifierForVendor`. Luego, simplemente llama a:

```swift lines theme={null}
Guardian
        .authentication(forDomain: "{yourTenantDomain}", device: device)
        .allow(notification: notification)
        .start { result in
            switch result {
            case .success:
                // la solicitud de autenticación fue permitida exitosamente
            case .failure(let cause):
                // algo falló, revisa cause para ver qué salió mal
            }
        }
```

<div id="reject-login-requests">
  ### Rechazar solicitudes de inicio de sesión
</div>

Para denegar una solicitud de autenticación, llame a `reject` en su lugar. También puede enviar un motivo de rechazo opcional. El motivo de rechazo aparecerá en los registros de Guardian.

```swift lines theme={null}
Guardian
        .authentication(forDomain: "{yourTenantDomain}", device: device)
        .reject(notification: notification)
        // o reject(notification: notification, withReason: "hacked")
        .start { result in
            switch result {
            case .success:
                // la solicitud de autenticación fue rechazada correctamente
            case .failure(let cause):
                // algo falló, revisa cause para ver qué salió mal
            }
        }
```

<div id="unenroll">
  ### Eliminar la inscripción
</div>

Si desea eliminar una inscripción, por ejemplo, para deshabilitar MFA, puede realizar la siguiente solicitud:

```swift lines theme={null}
Guardian
        .api(forDomain: "{yourTenantDomain}")
        .device(forEnrollmentId: "{userEnrollmentId}", token: "{enrollmentDeviceToken}")
        .delete()
        .start { result in
            switch result {
            case .success:
                // éxito, la inscripción fue eliminada
            case .failure(let cause):
                // algo falló, revisa cause para ver qué salió mal
            }
        }
```

<div id="set-up-mobile-only-otp-enrollment">
  ### Configurar la inscripción de OTP solo para móviles
</div>

Puede habilitar las contraseñas de un solo uso (OTP) como factor de MFA mediante el <Tooltip tip="Auth0 Dashboard: producto principal de Auth0 para configurar sus servicios." cta="Ver glosario" href="/es/docs/glossary?term=Auth0+Dashboard">Auth0 Dashboard</Tooltip> o la <Tooltip tip="Management API: un producto que permite a los clientes realizar tareas administrativas." cta="Ver glosario" href="/es/docs/glossary?term=Management+API">Management API</Tooltip>. Esta opción no requiere un código QR y permite a los usuarios inscribirse manualmente.

Para invitar a un usuario a inscribirse, vaya a [Auth0 Dashboard > User Management > Users](https://manage.auth0.com/#/users) y seleccione un usuario. Luego, acceda a la pestaña Details y use la sección Multi-Factor Authentication para enviar una invitación de inscripción.

<div id="connect-a-resource">
  #### Conectar un recurso
</div>

Puede conectar un recurso mediante el Auth0 Dashboard o el SDK de Guardian.

<div id="use-auth0-dashboard">
  ##### Usa Auth0 Dashboard
</div>

1. Accede a la pantalla de inicio de sesión de Auth0 y copia el code proporcionado o una clave similar codificada en base32 obtenida de otra fuente. En el siguiente paso, introducirás este code en una aplicación de autenticación.

   <Frame>
     <img src="https://mintcdn.com/translations/eVsQcTnbClN-oB7d/docs/images/cdy7uua7fh8z/1yoqiIuERVTwCU8yfx6IM8/047513dfe1d40a22ce811b131d5ea289/OTP_Challenge_2_-_English.png?fit=max&auto=format&n=eVsQcTnbClN-oB7d&q=85&s=128a02f4c7f65e7a1d82640b1b9842f6" alt="Un ejemplo de una pantalla de inicio de sesión que muestra un código de un solo uso" width="492" height="679" data-path="docs/images/cdy7uua7fh8z/1yoqiIuERVTwCU8yfx6IM8/047513dfe1d40a22ce811b131d5ea289/OTP_Challenge_2_-_English.png" />
   </Frame>
2. Agrega el code que copiaste a una aplicación de autenticación, como Guardian.

<div id="use-the-sdk">
  ##### Usa el SDK
</div>

1. Importa la biblioteca Guardian.

   ```swift lines theme={null}
   import Guardian
   ```

2. Crea un generador de code.

   ```swift lines theme={null}
   let codeGenerator = try Guardian.totp(

      base32Secret: enrollmentCode,  // Code de inscripción introducido por el usuario

      algorithm: .sha1			// Algoritmo utilizado por TOTP

   )
   ```

3. Obtén el code generado.

   ```swift lines theme={null}
   codeGenerator.code()
   ```

<div id="enter-one-time-code">
  #### Introduzca el código de un solo uso
</div>

En la pantalla de inicio de sesión de Auth0, introduzca el code que generó en el paso anterior.

<Frame>
  <img src="https://mintcdn.com/translations/eVsQcTnbClN-oB7d/docs/images/cdy7uua7fh8z/1yoqiIuERVTwCU8yfx6IM8/047513dfe1d40a22ce811b131d5ea289/OTP_Challenge_2_-_English.png?fit=max&auto=format&n=eVsQcTnbClN-oB7d&q=85&s=128a02f4c7f65e7a1d82640b1b9842f6" alt="Ejemplo de una pantalla de inicio de sesión que muestra un código de un solo uso" width="492" height="679" data-path="docs/images/cdy7uua7fh8z/1yoqiIuERVTwCU8yfx6IM8/047513dfe1d40a22ce811b131d5ea289/OTP_Challenge_2_-_English.png" />
</Frame>

Después de seleccionar Continuar, se muestra un mensaje indicando que su aplicación se ha añadido como factor de autenticación para su usuario.

<div id="log-in-with-your-app">
  #### Iniciar sesión con la aplicación
</div>

Después de inscribir el factor, el usuario podrá iniciar sesión con la aplicación. Primero, elija la aplicación Guardian como método de autenticación.

<Frame>
  <img src="https://mintcdn.com/translations/eVsQcTnbClN-oB7d/docs/images/cdy7uua7fh8z/1k7IsU9kfP5mrXU2jfGHuT/d61e0dcd09b633dbeb2cb54e1fd49018/2025-01-27_14-47-32.png?fit=max&auto=format&n=eVsQcTnbClN-oB7d&q=85&s=8688ecf3a0d42d92a6479adea541793d" alt="La pantalla de selección del método de autenticación" width="396" height="775" data-path="docs/images/cdy7uua7fh8z/1k7IsU9kfP5mrXU2jfGHuT/d61e0dcd09b633dbeb2cb54e1fd49018/2025-01-27_14-47-32.png" />
</Frame>

Luego, introduzca el código de un solo uso en la pantalla de inicio de sesión para verificar su identidad.

<Frame>
  <img src="https://mintcdn.com/translations/mMSz-RNYLuOm2GmQ/docs/images/cdy7uua7fh8z/S6uTieLjtuNUrQRMh8uch/21f1671d21ae9f61b63154ffaa21b5a2/OTP_Challenge_-_English.png?fit=max&auto=format&n=mMSz-RNYLuOm2GmQ&q=85&s=5db00906087d0b3d46e36cddc464d667" alt="La pantalla «Verifique su identidad», que solicita al usuario un código de un solo uso" width="494" height="669" data-path="docs/images/cdy7uua7fh8z/S6uTieLjtuNUrQRMh8uch/21f1671d21ae9f61b63154ffaa21b5a2/OTP_Challenge_-_English.png" />
</Frame>
